发现所有DbContext
本文关键字:DbContext 发现 | 更新日期: 2023-09-27 18:07:30
我的应用程序中有两个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
时,没有调用第二个DbContext
的OnModelCreating
,因此没有执行BaseUserTreeData
映射,实体框架6生成的查询是错误的。我看到我可以在单独的类中共享EntityConfiguration
,但是是否有一种方法可以告诉EF6调用所有DbContext
的每个OnModelCreating
?
我想你走错路了。不推荐这样处理Context
,如果模型之间有too strong relationship
,就必须把模型集中在one unique context
里面,否则以后会遇到很多问题。所以我的建议是使用EF team
下面建议的模式。
这是Microsoft EF Team建议的方法:
当使用Web应用程序时,使用上下文实例请求。
你可以阅读更多关于context
处理使用以下文章:
使用DbContext
使用实体框架正确地管理DbContext