- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在我的解决方案中,我有几个项目,它们一起构成了一个网络应用程序的一部分。
我正忙于设置 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/
在我的解决方案中,我有几个项目,它们一起构成了一个网络应用程序的一部分。 我正忙于设置 Entity Framework ,并在我的上下文类中,而不是必须在 protected override vo
我的数据库中有一个表,其复合主键由 foo 和 bar 组成。如果我这样做 private static void EfMapMyTableAdded(DbModelBuilder modelBuil
我正在尝试在我们的 EF 6 项目中实现软删除。我们正在使用数据库优先方法,我注意到您不能覆盖 OnModelCreating。 使用代码优先方法时,可以为特定实体应用全局过滤器,如本 blog po
我计划在我的下一个项目中使用 Entity Framework 4.1,但我很难找到实现它的好方法。简而言之,我想构建一个多层应用程序,其中实体将通过 Web 服务进行传输,并且为了尽可能保持干净,我
我昨晚在另一台电脑上创建了一个 MVC 项目用于测试它在那台电脑上运行良好,但是当我想在我自己的电脑上构建它时,我给出了错误:找不到类型或命名空间名称“DbModelBuilder”(您是否缺少...
我有一个 DbModel像这样配置: modelBuilder.Entity() .HasKey(w => w.PersistenceKey) .Pro
我正在基于我的 poco 类上的属性动态执行流畅的映射,我的 .Property 案例工作正常,但在尝试运行 .Ignore() 方法时失败了: private void AddEntities(Db
我得到的完整错误是这样的: 无法检查模型兼容性,因为数据库不包含模型元数据。确保已将 IncludeMetadataConvention 添加到 DbModelBuilder 约定中。 我已经在 SQ
我在 WinForms 项目 .net 4.5 中使用 EntityFramework 5.0 版。 我已经为我创建了 2 个重要的实体 public class Role {
我正在使用 EntityFramework,但在某些情况下我会遇到此异常: threw an exception.", inner exception: "Method not found: 'Voi
我是一名优秀的程序员,十分优秀!