代码首先是EntityConfiguration

时间:2012-11-06 14:49:43

标签: entity-framework code-first

是否可以在不同上下文中继承的上下文中修改/替换实体配置?

示例:我在名为Framework的解决方案中名为Data.Access的项目中有Context。它的OnModelCreating函数因此增加了实体配置:

protected override void OnModelCreating(DbModelBuilder modelBuilder) 
{
   // TestEntityConfiguration is the configuration of an entity named TestEntity in the Framework solution
   modelBuilder.Configurations.Add(new TestEntityConfiguration());

   // multiple other configurations...
}

在另一个名为FrameworkConsumer的解决方案中,我有一个Local.Data.Access项目,它有一个Context类,它在Framework解决方案中从Data.Access扩展Context。它的OnModelCreating函数如下所示:

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
   // Adds all the configurations from the Context in Data.Access in the Framework solution
   base.OnModelCreating(modelBuilder);

   // Other configurations local to the extended context go here...
}

我的问题是这个。在FrameworkConsumer解决方案的Local.Data.Access项目中,如果我想为TestEntity添加额外的配置设置或不同的配置,如何实现或者可以完成?我已经尝试添加另一个配置但是,我收到错误声明已经配置了此实体(TestEntity)。目前,我添加额外配置的解决方案是在Local.Data.Access Context类的Dispose函数中使用Database.ExecuteSqlCommand。不优雅,但它的工作原理。任何想法/建议将不胜感激。

由于

1 个答案:

答案 0 :(得分:0)

您可以将该配置放在另一个虚拟方法中,如果需要更改,可以覆盖该方法。例如:

protected override void OnModelCreating(DbModelBuilder modelBuilder) 
{
   // multiple other configurations...
   SpecialConfigurations(modelBuilder);    

}

protected virtual void SpecialConfigurations(DbModelBuilder modelBuilder) 
{
   // TestEntityConfiguration is the configuration of an entity named TestEntity in the Framework solution
   modelBuilder.Configurations.Add(new TestEntityConfiguration());

   // multiple other configurations...
}

然后覆盖SpecialConfigurations方法。