C# 无法在单独的项目中使用DbModelBuilder
在我的解决方案中,我有几个项目,它们一起构成了一个web应用程序的一部分 我正忙着在我的上下文类中设置实体框架,而不必在C# 无法在单独的项目中使用DbModelBuilder,c#,.net,asp.net-mvc,entity-framework,C#,.net,Asp.net Mvc,Entity Framework,在我的解决方案中,我有几个项目,它们一起构成了一个web应用程序的一部分 我正忙着在我的上下文类中设置实体框架,而不必在 protected override void OnModelCreating(DbModelBuilder modelBuilder) 方法,我希望能够在我的Model类中创建一个名为ConfigureModel的方法,然后在那里配置所有主键/外键设置,因此它应该如下所示: public class UserRolesModel : ModelBase { #r
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);
}
并且,例如,按如下方式调用该方法:
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添加到我的引用中,它也不起作用。我需要将实体框架安装到这个单独的项目中,这样才能工作
当然,我不必为我想在中使用DbModelBuilder
的每个项目添加EF
实现这一目标的另一种方式是什么
谢谢我遇到了一个类似的问题,我的从属项目无法解决与EF相关的引用
我不得不将EntityFramework.dll和EntityFramework.SqlServer.dll这两个程序集的引用添加到正在抱怨的项目中,从而解决了问题 这是你问过我的2美分。不要把流畅的代码放在你的模型中——这是一种糟糕的关注点分离,会把它们弄得乱七八糟(非POCO)。一个替代大型onmodel创建的好方法是: 1) 在项目中创建一个名为“EntityConfiguration”的上下文文件夹。在大型项目中,您可以将其进一步划分为“EntityConfiguration\System”、“EntityConfiguration\Employee”等 2) 为每个项目添加类:
public class ProductConfiguration : EntityTypeConfiguration<Product>
{
public ProductConfiguration()
{
HasKey(p => p.ProductId);
Property(p => p.ProductName)
.IsRequired()
.HasMaxLength(200);
...
}
}
这对我们的团队很有效。您几乎从未看过流畅的代码,因此将其排除在我们每天查看的模型之外是一件好事。您是否引用了正确的.Net版本?顺便说一句,使用NuGet要容易得多。只需将包添加到您的项目中。但是配置不应该发生在EF程序集中吗,这样你就可以将类程序集从EF中解耦?@GertArnold我的解决方案中有一个名为Common的项目,在这里我放置所有将在整个项目中使用的模型。因为这些模型将映射到我的表,所以我想在它们内部进行配置。你建议我在哪里进行所有必要的配置?我不知道,不知道你的项目。但我不喜欢多个库都依赖于EF的想法。也许一个映射程序集可以完成所有映射?@GertArnold谢谢你的想法。如果我理解正确,你是否认为我应该创建一个类,就像程序集中引用EntityFramework的“Initialize”类一样,并在那里进行所有映射?你基本上是在告诉我你和我有一些相同的问题,你最终通过添加EnittyFramework.dll解决了这个问题,我也这么做了。我真的很喜欢这种方法,谢谢你的努力和时间。如果我在与“数据访问层”相同的项目中执行此操作,这也意味着我不必在另一个实际不需要的项目中添加EntityFramework.dll。再次感谢,非常感谢。