gpt4 book ai didi

entity-framework - Entity Framework Code First - Fluent Api 与数据注释的优缺点

转载 作者:行者123 更新时间:2023-12-03 04:43:56 24 4
gpt4 key购买 nike

使用 Entity Framework 代码优先创建数据库时,可以从代码中提取很多数据库模型。 Fluent API 和/或属性可用于微调模型。

与数据注释相比,Fluent API 的优点和缺点是什么?换句话说,即使在某些情况下两种方法都可以使用,但在什么情况下应该使用一种方法优于另一种方法呢?

最佳答案

您可以使用 DataAnnotations 配置的所有内容也可以使用 Fluent API 实现。反之则不然。因此,从配置选项和灵 active 的角度来看,Fluent API“更好”。

配置示例(当然不是完整列表)可以在 Fluent API 中使用,但不能在 DataAnnotations 中使用(据我所知):

  • 关闭级联删除:

    .WillCascadeOnDelete(false)

  • 当对象模型中未公开键时,指定数据库中的外键列名称:

    .Map(conf => conf.MapKey("MyForeignKeyID"))

  • 对关系进行细粒度调整,尤其是在对象模型中仅公开关联一侧的所有情况下:

    .WithMany(...) , WithOptional(...) , WithRequiredDependent(...) , WithRequiredPrincipal(...)

  • 对象模型和数据库表之间的继承映射规范(Table-Per-Hierarchy、Table-Per-Type、Table-Per-Concrete-Class):

    .Map<TDerived>(Action<EntityMappingConfiguration<TDerived>> ...)

编辑:Microsoft 将 Fluent API 视为“高级功能”(引自 here):

The fluent API is considered a more advanced feature and we would recommend using Data Annotations unless your requirements require you to use the fluent API.

但在我看来,您很快就会达到 DataAnnotations 的局限性(除了极其简单的对象模型之外)。如果您无法再使用 DataAnnotations 微调模型,您最后的选择是遵循默认映射约定(通过根据这些规则命名属性)。目前您无法覆盖这些约定(只能禁用它们;MS 宣布在未来的 EF 版本中提供这些约定的配置选项)。但是,如果您不想在定义对象模型时被迫遵守映射约定,那么唯一的选择就是 Fluent API。

学习 Fluent API 几乎是必须的,DataAnnotations 对于简单的应用程序来说是一个很好的选择。

关于entity-framework - Entity Framework Code First - Fluent Api 与数据注释的优缺点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5354900/

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