发现所有DbContext

时间:2016-09-19 09:45:59

标签: c# .net entity-framework entity-framework-6

我的应用程序中有两个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的内容?

1 个答案:

答案 0 :(得分:0)

我认为您处于错误的路径。这不是推荐的处理Context的方式。如果模型之间存在too strong relationship,则必须将模型集中在{{1}内否则你将来必须面对这么多问题。所以我的建议是使用one unique context建议的模式。

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

  

使用Web应用程序时,请使用每个上下文实例   请求。

您可以使用以下文章了解有关EF team处理的更多信息:

Working with DbContext

Managing DbContext the right way with Entity Framework