C# 发现所有DbContext

C# 发现所有DbContext,c#,.net,entity-framework,entity-framework-6,C#,.net,Entity Framework,Entity Framework 6,我的应用程序中有两个DbContext,它们使用fluentapi配置一些模型。第一个DbContext的一个模型具有在第二个DbContext中配置的第二个模型的外键 public class UserData { public double Id { get; set; } public string LastName { get; set; } public string FirstName { get; set; }

我的应用程序中有两个DbContext,它们使用fluentapi配置一些模型。第一个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; }
    }
        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);
        }

当我第一次对我的
UserDbContext
使用
UserData
时,我的第二个
DbContext
OnModelCreating
没有被调用,因此
BaseUserTreeData
映射没有被执行,实体框架6生成的查询是错误的。我看到我可以在单独的类中共享
实体配置
,但是有没有办法告诉EF6调用我所有
DbContext
的所有
模型创建

我认为你走错了路。这不是处理
上下文
的推荐方法。如果模型之间有
太强的关系
,您必须将模型集中在一个独特的上下文中。否则,您将不得不在未来面临许多问题。因此,我的建议是使用下面建议的模式

这是Microsoft EF团队建议的方式:

使用Web应用程序时,请根据使用上下文实例 请求

您可以使用以下文章阅读有关
context
处理的更多信息:


我认为你走错了路。这不是处理
上下文的推荐方法。如果模型之间的
关系太强
,您必须将模型集中在一个独特的上下文中。否则,您将不得不在未来面临许多问题。因此,我的建议是使用下面建议的模式

这是Microsoft EF团队建议的方式:

使用Web应用程序时,请根据使用上下文实例 请求

您可以使用以下文章阅读有关
context
处理的更多信息:


为什么这里需要2个
上下文
呢?因为我想使用第二个DbContext,而不使用第一个DbContext的所有实体,那么您使用它做什么呢?你打算用这个模式解决哪个问题?我想在我的上下文之间有一个弱链接。但是,可能所有具有关系的模型都必须映射并在相同的上下文中使用?我不想使用大的上下文,这就是为什么我想分离上下文。这是
web应用程序
桌面应用程序
?为什么这里需要2个
上下文
?因为我想使用第二个DbContext,而不使用第一个DbContext的所有实体。那么,你用它做什么呢?你打算用这个模式解决哪个问题?我想在我的上下文之间有一个弱链接。但是,可能所有具有关系的模型都必须映射并在相同的上下文中使用?我不想使用大的上下文,这就是为什么我想分离上下文。这是
web应用
桌面应用
?我们已经遵循这个建议,每个请求一个上下文实例,但有时我们在一个请求中使用两种上下文。但你是对的,如果模型之间的关系太强,我们必须将模型集中在一个独特的上下文中。是的,这是真的。我也更新了我的帖子以反映你的评论。我们已经遵循这个建议,每个请求一个上下文实例,但有时我们在一个请求中使用两种上下文。但你是对的,如果模型之间的关系太密切,我们必须将模型集中在一个独特的环境中。是的,这是真的。我也更新了我的帖子以反映你的评论。