我刚刚开始学习实体框架(从 5.0 开始)并遇到了一些问题。在观看了 Pluralsight 上的一些视频后,我决定发挥创意,创建了一个继承自 DbContext 的抽象基类,并公开了一个“DataContext”属性,该属性是一个泛型类型的 DbSet。像这样的东西:
public abstract class BaseDataContext<E> : DbContext
where E : CustomEntity
{
public DbSet<E> DataContext {get;set;}
public BaseDataContext()
{
Database.SetInitializer<BaseDataContext<E>>(null);
}
}
在我开始处理彼此有关系的实体(父/子)之前,这似乎工作得很好。发生的事情是,当我尝试通过继承 BaseDataContext 的数据类向数据库添加一个新的子实体时,而不是仅仅附加引用(意思是,带着孩子说“你的父键是 123”),它创建了另一个使用父项的新键记录,所有其他字段重复,并使此新记录成为子项的父项。我尝试只设置我孩子的 key 属性(取消与数据一起公开的属性),但这并没有改变任何东西。我在 SO (这里) 上发现了一个线程,它说像我试图做的那样做多个数据上下文并不是一个好主意,并且似乎准确地解释了正在发生的事情。
我的问题是,随着 EF 似乎越来越受欢迎,这是常用的方法吗?要创建一个单一的数据上下文,然后随处传递构造函数?还是有更简单的更常见的方法?如果事情进入后台线程,这尤其适用,因为在那里传递上下文可能会变得困难。
提前致谢!