gpt4 book ai didi

c# - 不能在单独的项目中使用 DbModelBuilder

转载 作者:行者123 更新时间:2023-11-30 21:50:48 24 4
gpt4 key购买 nike

在我的解决方案中,我有几个项目,它们一起构成了一个网络应用程序的一部分。

我正忙于设置 Entity Framework ,并在我的上下文类中,而不是必须在

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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com