Code First – Data Annotations还是Fluent API更好?

只是想知道什么是更好的方式来configuration我的模型?

我喜欢Fluent API,因为那时我的POCO没有充满EF特定的属性。

有什么你不能用你可以使用属性的Fluent API?

使用Fluent API也可以使用DataAnnotationsconfiguration所有的东西。 相反是不正确的。 所以,从configuration选项和灵活性的angular度来看,Fluent API是“更好的”。

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

  • closures级联删除:

    .WillCascadeOnDelete(false)

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

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

  • 对关系进行细粒度的调整,特别是在对象模型中只显示关联的一侧的所有情况下:

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

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

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

编辑:Microsoft认为Fluent API作为“高级function”(从这里引用):

stream利的API被认为是一个更高级的function,我们build议使用数据注释,除非你的要求要求你使用stream利的API。

但是在我看来,你很快就达到了DataAnnotations的限制(除了极其简单的对象模型)。 如果你不能用DataAnnotations对你的模型进行微调,你最后的手段就是遵循默认的映射约定(按照这些规则命名你的属性)。 目前,您不能覆盖约定(只能禁用它们; MS宣布在未来的EF版本中为约定提供configuration选项)。 但是,如果您不想在定义对象模型时被映射约定强制,那么唯一的select就是Fluent API。

学习Fluent API几乎是必须的,DataAnnotations对于简单的应用程序来说是非常好的。