首先,看类定义: Persons为一个实体类。 public class IMSDB { public DBSet Persons { get; set; } } public class DBSet { public bool Del(int id) { return true; } } 在调用的地方: IMSDB IMSDB = new IMSDB(); IMSDB.Persons.Del(1); 我想以IMSDB.Persons.
举个EF中的例子吧,在MusicStore中
using System.Data.Entity;
public class MusicStoreEntities : DbContext
{
public DbSet<Album> Albums { get; set; }
public DbSet<Genre> Genres { get; set; }
}
调用的时候只需要
MusicStoreEntities obj = new MusicStoreEntities();
obj.Albums.Create();
Albums是普通的实体类,并没有实例化,也可以调用Create();方法,具体实现原理是什么呢?
public class IMSDB
{
public DBSet<Person> Persons { get; set; }
public IMSDB()
{
persons=new dbset<person>();
}
}
IMSDB imsdb = new IMSDB();
imsdb.Persons.Del(3);
我在IMSDB类的构造函数里写了个反射实例化、但是item.SetValue(t, o, null);的时候报错,请教下应该怎么写?这些实例化的操作能否放到DBController里进行?谢谢。
public class IMSDB : DBController
{
public DBSet<Memo> Memos { get; set; }
public DBSet<Person> Persons { get; set; }
public DBSet<User> Users { get; set; }
public IMSDB()
{
//Persons = new DBSet<Person>();
var type = this.GetType();
//反射解析 获取成员列表
System.Reflection.PropertyInfo[] properties = type.GetProperties(System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.Public);
if (properties.Length > 0)
{
foreach (System.Reflection.PropertyInfo item in properties)
{
Type t = item.PropertyType.GetGenericArguments()[0]; //泛型中实体的类型
object o = t.GetConstructor(new Type[0]).Invoke(new object[0]); //实例化实体类