首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >实体框架代码优先- Fluent Api与数据注释的优缺点

实体框架代码优先- Fluent Api与数据注释的优缺点
EN

Stack Overflow用户
提问于 2011-03-19 00:22:20
回答 1查看 40.3K关注 0票数 129

当使用实体框架创建数据库时,代码优先,很多数据库模型都可以从代码中提取出来。Fluent API和/或属性可用于对模型进行微调。

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-03-19 02:20:49

使用DataAnnotations可以配置的所有内容,也可以使用Fluent API进行配置。反之亦然。因此,从配置选项和灵活性的角度来看,Fluent API是“更好的”。

配置示例(当然不是完整的列表),在Fluent API中是可能的,但在DataAnnotations中是不可能的(据我所见):

  • 关闭级联删除:

当键未在对象模型中公开时,数据库中的.WillCascadeOnDelete(false)

  • Specify外键列名称:

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

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

对象模型和数据库表之间继承映射的WithRequiredPrincipal(...)

  • Specification、.WithMany(...)WithOptional(...)WithRequiredDependent(...) (每个层次结构的表、每个类型的表、每个具体类的表):

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

编辑:微软认为Fluent API是一个“高级功能”(引用自here):

,fluent API被认为是一个更高级的特性,我们建议您使用数据注释,除非您的需求要求您使用fluent API。

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

学习Fluent API几乎是必须的,对于简单的应用程序来说,DataAnnotations是一个很好的选择。

票数 153
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5354900

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档