使用FluentAPI和代码优先功能在EF6的DbContext中进行功能分组

JD雷

我有一个复杂的对象模型,正在尝试使用FluentAPI进行严格控制。我最后得到的是大块代码,如下所示:

        modelBuilder.Entity<Product>().Property(t => t.Category).IsRequired();
        modelBuilder.Entity<Product>().Property(t => t.Description).IsOptional();
        modelBuilder.Entity<Product>().Property(t => t.Name).IsRequired();
        modelBuilder.Entity<Product>().Property(t => t.PricingAnalyst).IsOptional();
        modelBuilder.Entity<Product>().Property(t => t.ProductCode).IsRequired();
        modelBuilder.Entity<Product>().Property(t => t.ReplacedByProductCode).IsOptional();
        modelBuilder.Entity<Product>().Property(t => t.Section).IsOptional();
        modelBuilder.Entity<Product>().HasMany<ProductReference>(s => s.References);
        modelBuilder.Entity<Product>().HasMany<ProductWeight>(s => s.Weights);
        modelBuilder.Entity<Product>().HasMany<ProductDate>(s => s.Dates);
        modelBuilder.Entity<Product>().HasMany<ProductNote>(s => s.Notes);
        modelBuilder.Entity<Product>().HasMany<Rule>(s => s.Rules);
        modelBuilder.Entity<Product>().HasOptional<PriceDetail>(s => s.Pricing);
        modelBuilder.Entity<Product>().HasOptional<ProductCosting>(s => s.Costing);
        modelBuilder.Entity<Product>().HasMany<Update>(u => u.Updates);

在我看来,modelBuilder.Entity<Product>()如果我可以做一些能达到的效果,我就可以停止打字太多了

using (modelBuilder.Entity<Product>() p)
{
    p.Property(t => t.PricingAnalyst).IsOptional();
    ...
    p.HasMany<ProductReference>(s => s.References);
}

会节省很多精力,但我无法弄清楚如何using正确构造该语句。这是正确的路吗?如果没有,我该如何简化代码并使其更具可读性?

更新:

根据提供的答案,我在:DbContext文件中创建了类似于以下内容的块:

        {
            var rule = modelBuilder.Entity<Rule>();
            rule.HasKey(r => r.ID);
            rule.Property(r => r.Country).IsRequired();
            rule.Property(r => r.Description).IsOptional();
            rule.Property(r => r.ReviewDate).IsOptional();
            rule.Property(r => r.RuleNumber).IsRequired();
            rule.HasMany<Update>(r => r.Updates);
            rule.HasMany<Condition>(r => r.Conditions);
        }

我选择将每个块用大括号括起来以包含的范围,var因此我在代码的其他地方没有发生任何复制/粘贴事故。我喜欢这种方式,并且使我的代码可读(至少对我而言,希望对其他人而言)。

贾斯汀·摩根(Justin Morgan)

听起来就像您只想要:

using (var p = modelBuilder.Entity<Product>())
{
    //...
}

但是,这只有在modelBuilder.Entity<Product>()Implements的结果下才有效IDisposable遍历有关该主题的MSDN信息,看起来好像没有。如果没有,您可能可以做得很好:

var p = modelBuilder.Entity<Product>();
//...

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用FluentAPI和代码优先功能在EF6的DbContext中进行功能分组

来自分类Dev

EF6代码优先对表进行复数的对象名称无效

来自分类Dev

EF6代码优先:使用Fluent API声明外键

来自分类Dev

在代码优先EF6中使用SqlGeography不生成列

来自分类Dev

EF6:代码优先复杂类型

来自分类Dev

带有代码优先EF6的多租户

来自分类Dev

带有代码优先EF6的多租户

来自分类Dev

EF6代码优先模型ForeignKey

来自分类Dev

存储过程以ef 6和代码优先

来自分类Dev

如何使用用户定义的功能在APL中进行缩小/扫描?

来自分类Dev

EF6代码优先,具有通用存储库以及依赖注入和SoC

来自分类Dev

EF6代码优先-使用不匹配的外键配置一对一关系

来自分类Dev

使用EF6将文档存储在数据库ASP.NET MVC5中-代码优先

来自分类Dev

如何在EF6代码优先中对数据库上下文使用通用类型

来自分类Dev

EF6代码优先-使用不匹配的外键配置一对一关系

来自分类Dev

EF6,代码优先。如何使用 XAML Devexpress 为 GridControl 列设置替代数据源

来自分类Dev

首先将EF6存储功能用于Entity Framework代码,我可以返回自定义类型吗?

来自分类Dev

具有一个EF6模型(数据库优先)和一个代码优先的解决方案

来自分类Dev

在不进行迁移的情况下优先使用EF 6.xx代码的缺点

来自分类Dev

如何使用EF6的分组依据从表中查询?

来自分类Dev

EF6应用代码

来自分类Dev

使用MySQL进行EF和代码优先迁移-dbo.tablename不存在

来自分类Dev

DbContext / EF6上的eSQL查询

来自分类Dev

使用分析功能时进行分组

来自分类Dev

Moq和EF6进行单元测试

来自分类Dev

代码优先EF6 SqlServerMigrationSqlGenerator中的自定义逻辑不起作用

来自分类Dev

EF6,代码优先,启用迁移,“无法加载指定的元数据资源”

来自分类Dev

EF6中的代码优先反向工程师在哪里

来自分类Dev

EF6代码优先-可能导致循环或多个级联路径

Related 相关文章

  1. 1

    使用FluentAPI和代码优先功能在EF6的DbContext中进行功能分组

  2. 2

    EF6代码优先对表进行复数的对象名称无效

  3. 3

    EF6代码优先:使用Fluent API声明外键

  4. 4

    在代码优先EF6中使用SqlGeography不生成列

  5. 5

    EF6:代码优先复杂类型

  6. 6

    带有代码优先EF6的多租户

  7. 7

    带有代码优先EF6的多租户

  8. 8

    EF6代码优先模型ForeignKey

  9. 9

    存储过程以ef 6和代码优先

  10. 10

    如何使用用户定义的功能在APL中进行缩小/扫描?

  11. 11

    EF6代码优先,具有通用存储库以及依赖注入和SoC

  12. 12

    EF6代码优先-使用不匹配的外键配置一对一关系

  13. 13

    使用EF6将文档存储在数据库ASP.NET MVC5中-代码优先

  14. 14

    如何在EF6代码优先中对数据库上下文使用通用类型

  15. 15

    EF6代码优先-使用不匹配的外键配置一对一关系

  16. 16

    EF6,代码优先。如何使用 XAML Devexpress 为 GridControl 列设置替代数据源

  17. 17

    首先将EF6存储功能用于Entity Framework代码,我可以返回自定义类型吗?

  18. 18

    具有一个EF6模型(数据库优先)和一个代码优先的解决方案

  19. 19

    在不进行迁移的情况下优先使用EF 6.xx代码的缺点

  20. 20

    如何使用EF6的分组依据从表中查询?

  21. 21

    EF6应用代码

  22. 22

    使用MySQL进行EF和代码优先迁移-dbo.tablename不存在

  23. 23

    DbContext / EF6上的eSQL查询

  24. 24

    使用分析功能时进行分组

  25. 25

    Moq和EF6进行单元测试

  26. 26

    代码优先EF6 SqlServerMigrationSqlGenerator中的自定义逻辑不起作用

  27. 27

    EF6,代码优先,启用迁移,“无法加载指定的元数据资源”

  28. 28

    EF6中的代码优先反向工程师在哪里

  29. 29

    EF6代码优先-可能导致循环或多个级联路径

热门标签

归档