我对 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 中。我认为这应该是可能的,否则朱莉不会写这件事。它不应该那么困难。帮助将不胜感激。干杯奥利弗