我的应用程序中有两个DbContext,它使用Fluent API配置一些模型。我的第一个DbContext的一个模型在我的第二个DbContext中配置了第二个模型的外键。
public class UserData
{
public double Id { get; set; }
public string LastName { get; set; }
public string FirstName { get; set; }
public string FullName {
get {
return $"{this.FirstName} {this.LastName}";
}
}
public string Adress1 { get; set; }
public virtual BaseUserTreeData BaseUserTree { get; set; }
public double? BaseUserTreeId { get; set; }
public virtual List<DeviceData> Devices { get; set; }
}
模型BaseUserTreeData
是我在第二个DbContext中配置的外来属性。
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
modelBuilder.Entity<BaseUserTreeData>().ToTable("sw_data_baseusertree");
modelBuilder.Entity<BaseUserTreeData>().Property(baseusertree => baseusertree.Id).HasColumnName("baseusertree_ID");
modelBuilder.Entity<BaseUserTreeData>().Property(baseusertree => baseusertree.Label).HasColumnName("label");
modelBuilder.Entity<BaseUserTreeData>().Property(baseusertree => baseusertree.ParentTreeId).HasColumnName("baseUserTree_ID_parent");
modelBuilder.Entity<BaseUserTreeData>().HasKey(baseusertree => baseusertree.Id);
modelBuilder.Entity<BaseUserTreeData>()
.HasOptional(tree => tree.ParentTree)
.WithMany(tree => tree.ChildTrees)
.HasForeignKey(tree => tree.ParentTreeId);
}
我第一次使用UserData
和我的UserDbContext
时,我的第二个OnModelCreating
的{{1}}未被调用,因此DbContext
映射不是执行,实体框架6生成的查询是错误的。我看到我可以在不同的课程中分享BaseUserTreeData
,但是有没有办法告诉EF6拨打我EntityConfiguration
所有OnModelCreating
的内容?
答案 0 :(得分:0)
我认为您处于错误的路径。这不是推荐的处理Context
的方式。如果模型之间存在too strong relationship
,则必须将模型集中在{{1}内否则你将来必须面对这么多问题。所以我的建议是使用one unique context
建议的模式。
这是 Microsoft EF团队建议的方式:
使用Web应用程序时,请使用每个上下文实例 请求。
您可以使用以下文章了解有关EF team
处理的更多信息: