在我的解决方案中,我有几个项目,它们一起构成一个 Web 应用程序的一部分。
我正忙于设置 Entity Framework ,并在我的上下文类中,而不必在
中编写所有流畅的 API 代码protected override void OnModelCreating(DbModelBuilder modelBuilder)
方法,我希望能够在我的 Model
类中创建一个名为 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
引用。即使我将 System.Data.Entity dll 添加到我的引用中,它也不起作用。我还需要将 Entity Framework 安装到这个单独的项目中才能正常工作。
我当然不必将 EF 添加到我想要使用 DbModelBuilder
的每个项目中吗?
实现这一目标的另一种方法是什么?
谢谢
最佳答案
既然你问了,这是我的 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());
}
这对我们的团队来说效果很好。您几乎不会查看流畅的代码,因此将其排除在我们日常查看的模型之外是一件好事。
关于c# - 无法在单独的项目中使用 DbModelBuilder,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36141356/