Sam*_*Sam 107 entity-framework ef-fluent-api
在使用Entity Framework代码优先创建数据库时,可以从代码中提取许多数据库模型.Fluent API和/或Attributes可用于微调模型.
与数据注释相比,Fluent Api有哪些优缺点?换句话说:即使在某些情况下可以使用这两种方法,在一种情况下,一种方法应该优先于另一种方法吗?
Sla*_*uma 133
使用Fluent API也可以使用DataAnnotations配置所有内容.反之则不然.因此,从配置选项和灵活性的角度来看,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视为"高级功能"(引自此处):
流畅的API被认为是更高级的功能,我们建议使用数据注释,除非您的要求要求您使用流畅的API.
但在我看来,你很快就达到了DataAnnotations的限制(除非是非常简单的对象模型).如果您无法再使用DataAnnotations对模型进行微调,则最后的方法是遵循默认的映射约定(根据这些规则命名属性).目前,您无法覆盖这些约定(仅禁用它们; MS宣布在将来的EF版本中为约定提供配置选项).但是,如果您不希望在定义对象模型时被映射约定强制,那么您唯一的选择就是Fluent API.
学习Fluent API几乎是必须的,DataAnnotations对于简单的应用程序来说是一个很好的选择.