当使用实体框架创建数据库时,代码优先,很多数据库模型都可以从代码中提取出来。Fluent API和/或属性可用于对模型进行微调。
与数据注释相比,Fluent Api的优势和劣势是什么?换句话说:即使在某些情况下两种方法都可以使用,在什么情况下其中一种方法应该优于另一种方法?
发布于 2011-03-18 18:20:49
使用DataAnnotations可以配置的所有内容,也可以使用Fluent API进行配置。反之亦然。因此,从配置选项和灵活性的角度来看,Fluent API是“更好的”。
配置示例(当然不是完整的列表),在Fluent API中是可能的,但在DataAnnotations中是不可能的(据我所见):
当键未在对象模型中公开时,数据库中的.WillCascadeOnDelete(false)
.Map(conf => conf.MapKey("MyForeignKeyID"))
对象模型和数据库表之间继承映射的WithRequiredPrincipal(...)
.WithMany(...)
、WithOptional(...)
、WithRequiredDependent(...)
(每个层次结构的表、每个类型的表、每个具体类的表):.Map<TDerived>(Action<EntityMappingConfiguration<TDerived>> ...)
编辑:微软认为Fluent API是一个“高级功能”(引用自here):
,fluent API被认为是一个更高级的特性,我们建议您使用数据注释,除非您的需求要求您使用fluent API。
但在我看来,您很快就会达到DataAnnotations的局限性(可能除了极其简单的对象模型之外)。如果您不能再使用DataAnnotations对模型进行微调,那么最后的办法就是遵循默认的映射约定(根据这些规则命名属性)。目前您不能覆盖这些约定(仅禁用它们;微软宣布在未来的EF版本中提供这些约定的配置选项)。但是,如果您不想在定义对象模型时受到映射约定的限制,那么您唯一的选择就是Fluent API。
学习Fluent API几乎是必须的,对于简单的应用程序来说,DataAnnotations是一个很好的选择。
https://stackoverflow.com/questions/5354900
复制相似问题