3

我对 Entity Framework 6 有疑问。我尝试使用单个“ubercontext”创建我的巨大数据库(CodeFirst)(50 多个表),然后针对不同的问题使用不同的 dbcontext。

这个 UberContext 包含:

    public class UberDbContext :DBContent
    {
        Database.SetInitializer<UberDbContext >((new DropCreateDatabaseIfModelChanges<UberDbContext>()));
            public UberDbContext()
                : base("name=myDb")
            {
                this.Configuration.LazyLoadingEnabled = false;
                this.Configuration.ProxyCreationEnabled = false;
                this.Configuration.AutoDetectChangesEnabled = false;
                this.Configuration.ValidateOnSaveEnabled = false;
            }
    public DbSet<MyEntity1> MyEntity1 { get; set; }

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
            {
                modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
                const string schemaName = "mySchema";
    ...//all my different entities
                modelBuilder.Entity<MyEntity1>().ToTable("MyEntity1", schemaName);
    ...//all my other tables
                modelBuilder.Configurations.Add(new MyEntity1Map());
    ...//all my other entitymaps
    }

这很好,数据库是在我第一次使用这个 UberContext 时创建的。所有的键和约束都是用 FluentApi 创建的。我只需要用一个推它 UberContext.MyEntity1.Add(myDummyEntity1) 但是如果我使用我的其他上下文,它只需要数据库的一部分,代码会抛出一个

ModelValidationException 'MyEntity1' 没有定义键。定义此 EntityType 的键。

但这应该通过 fluentapi 进行配置。如果我添加关键属性,这可以正常工作,但约束无法解决。似乎忽略了配置。

我前两天搜索了这个问题,没有找到。ubercontext 的想法来自 Julie Lerman 根据她的书“DBContext”和这篇文章:http: //msdn.microsoft.com/en-us/magazine/jj883952.aspx

我的其他上下文如下所示:

public partial class MyEntity1DbContext:BaseContext<MyEntity1DbContext>
{
public DbSet<MyEntity1> MyEntity1 {get;set;} 
//...
}

和 BaseContext:

public class BaseContext<TContext> : DbContext
    where TContext : DbContext
{
    static BaseContext()
    {
        Database.SetInitializer<TContext>(null);
    }

    protected BaseContext()
        : base("name=myDb")
    {

    }
}

我不知道该怎么办了。我不能更改数据库,我不希望所有表都在 1 个 DbContext 中。我认为这应该是可能的,否则朱莉不会写这件事。它不应该那么困难。帮助将不胜感激。干杯奥利弗

4

0 回答 0