关闭。这个问题是 opinion-based 。它目前不接受答案。












想改善这个问题吗?更新问题,以便可以通过 editing this post 用事实和引文来回答。

7年前关闭。



Improve this question




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

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

最佳答案

您可以使用 DataAnnotations 配置的所有内容也可以使用 Fluent API。反过来就不对了。因此,从配置选项和灵活性的角度来看,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):



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

    学习 Fluent API 几乎是必须的,恕我直言,DataAnnotations 对于简单的应用程序来说是一个不错的选择。

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

    10-15 13:45