在我的解决方案中,我有一些项目,它们共同构成了一个Web应用程序的一部分。
我正在忙于设置实体框架,并且在我的上下文类中,而不是必须在
中编写所有流畅的API代码protected override void OnModelCreating(DbModelBuilder modelBuilder)
方法,我希望能够在名为Model
的{{1}}类中创建一个方法,然后在那里配置所有主键/外键设置,所以它应该如下所示:
ConfigureModel
例如,调用方法如下:
public class UserRolesModel : ModelBase
{
#region Configuration
public static void ConfigureModel(DbModelBuilder modelBuilder)
{
//necessary code here
}
#endregion
}
我遇到的问题是我的protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
UserRolesModel.ConfigureModel(modelBuilder);
}
方法:我似乎无法解析ConfigureModel
引用。即使我将DbModelBuilder
dll添加到我的引用中,它也不起作用。我需要将Entity Framework安装到这个单独的项目中,以便工作。
当然,我不需要为每个我想使用System.Data.Entity
的项目添加EF吗?
实现这一目标的另一种方法是什么?
由于
答案 0 :(得分:3)
自从你提问以来,这是我的2美分。不要在你的模型中加入流畅的代码 - 关注点分离不好,使它们混乱(非POCO)。这是一个巨大的OnModelCreating的一个很好的替代品:
1)在项目中创建一个文件夹,其中包含您的上下文" EntityConfigurations"。在一个大型项目中,您可以进一步划分它,例如" EntityConfigurations \ System"," EntityConfigurations \ Employee"等等。From Scott Allen
2)为每个项目添加课程:
public class ProductConfiguration : EntityTypeConfiguration<Product>
{
public ProductConfiguration()
{
HasKey(p => p.ProductId);
Property(p => p.ProductName)
.IsRequired()
.HasMaxLength(200);
...
}
}
3)使用AddFromAssembly,您的地图类将被自动发现并运行。 From Julie Lerman.
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
Configuration.LazyLoadingEnabled = false;
modelBuilder.Configurations.AddFromAssembly(Assembly.GetExecutingAssembly());
}
这对我们的团队来说效果很好。你几乎没有看过流利的代码,所以把它放在我们每天看的模型之外是件好事。
答案 1 :(得分:0)
我遇到了类似的问题,我的依赖项目无法解析与EF相关的引用
我不得不将2个程序集的引用,EntityFramework.dll和EntityFramework.SqlServer.dll添加到修复该问题的抱怨的项目中。