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对于简单的应用程序来说是非常好的。
- 我怎样才能让我的数据库使用entity frameworkCodeFirst种子?
- LINQ to Entities不能识别该方法
- 使用entity framework进行unit testing
- entity framework是否支持并行asynchronous查询?
- 指定的命名连接在configuration中找不到,不打算与EntityClient提供程序一起使用,或者无效
- entity framework数据库中的代码优先默认数据
- recursion层次 – 使用Linq的recursion查询
- LINQ to Entities不识别方法System.String Format(System.String,System.Object,System.Object)'
- debugging代码 – 第一个entity framework迁移代码