是否有可能只有一个属性为IDbSet的DbContext,而不是具体IDbSet的集合,例如DbSet .
更具体地说,我想只创建一个通用DbSet,其中动态确定实际类型,例如
public new IDbSet<T> Set<T>() where T : class
{
return context.Set<T>();
}
我不想创建多个DbSets,例如
DbSet<product> Products { get; set; }
...
实际上我试图使用那个通用的DbSet,但似乎有一个问题 . DbContext不会在数据库中创建相应的表 . 因此,虽然我可以使用内存中的实体图,但是当将entites存储到数据库中时,会抛出异常(无效的对象名称'dbo.Product' . )
有没有办法强制EF创建对应dynamicrate创建DbSets的表?
1 回答
Yes you can do this.
将导出DBSet条目 .
如果你打算使用POCO,只需用这种方式构建模型即可 . 所以你保存手动DBSet <>声明......
但如果你打算在没有POCO的情况下更加动态......
在沿着这条路走下去之前,有很多事情需要考虑 .
您选择了正确的ORM吗?
你打算有POCO吗?
为什么选择DbSet产品{get;组; } 太糟了 ?
你会为这一行代码获得很多动作 .
您打算在没有类型DBS的情况下使用什么数据访问方法
您打算使用Linq to Entity语句吗?
您是否计划为必要的动态数据访问创建表达式树 . 由于类型在编译时是未知的 .
您打算使用数据库模型缓存吗?
如何管理缓存,尤其是在Web中 . ASP环境 .
最有可能的其他问题我想到了我的头脑 . 自己构建模型是一项艰巨的任务 . 当不使用编译时类型/ POCO并且模型缓存和性能成为关键管理任务时,Linq访问会受到影响 .
这个任务的实际方面是不要估计从这里开始bContext.OnModelCreating
The modelbuilder class
祝好运