什么是实体框架流利的 api?

Posted

技术标签:

【中文标题】什么是实体框架流利的 api?【英文标题】:What is Entity Framework fluent api? 【发布时间】:2011-09-14 00:15:42 【问题描述】:

我不断听到有关实体框架 fluent-api 的消息,但我正在努力寻找一个好的参考。这是什么?

我们使用提供的实体框架和建模工具。这就是全部吗?还是有什么不同?

同样,如果不是太宽泛的问题,什么是 POCO?我知道它代表普通旧 CLR 对象,但这对我作为已经使用 EF 和设计器模型工具的人来说意味着什么?如果这个问题太模糊,请忽略它。我只是在这里学习,您愿意提供的任何信息都会有所帮助。

【问题讨论】:

【参考方案1】:

Entity Framework 4.1 引入了编写数据库模型的代码优先方法。这也称为 POCO(普通旧 CLR 对象)。这个想法是您可以从这些类构建数据库,而不是先构建数据库并从中创建模型。

有大量关于此的优秀博客文章和 MSDN 文档。一个好的起点是

http://blogs.msdn.com/b/adonet/archive/2010/12/14/ef-feature-ctp5-fluent-api-samples.aspx

http://weblogs.asp.net/scottgu/archive/2010/12/08/announcing-entity-framework-code-first-ctp5-release.aspx

http://weblogs.asp.net/manavi/archive/2011/03/27/associations-in-ef-4-1-code-first-part-1-introduction-and-basic-concepts.aspx

关于 fluent API,这基本上是使用 EF 类来构建您的数据库,例如:

modelBuilder.Entity<Category>().HasKey(c => c.CategoryCode);

所以您手动声明Category 表有一个名为“CategoryCode”的主键。你也可以这样声明PK:

public class Category

    [Key]    
    public int CategoryCode  get; set;

[Key] 属性来自Data Annotations

【讨论】:

Jason,如果我决定使用 Data Annotations 而不是 fluent api,我会错过什么大事吗?我刚开始使用 MVC,这个主题对我来说是一个更大的曲线。 我不相信你错过了。但我想说的是,使用 fluent API 意味着您可以将所有数据库设置放在一个方法中,而不是将该设置分散在与不同类关联的属性中。所以这是你真正喜欢哪种方式的情况。 @JasonEvans 很好的回应,同样,我想知道什么是最好的工具来控制我们的数据库、fluent-api 或数据注释的所有控件?尤其是当我们处理一个有大量数据库结构变化的大项目时?【参考方案2】:

POCO 代表普通旧 CLR 对象。

Article 在 Fluent API 上。

【讨论】:

【参考方案3】:

您还可以在此处查看 MSDN 上的 Code First Fluent API 部分 http://msdn.microsoft.com/en-us/library/hh295844

【讨论】:

【参考方案4】:

回答您的 POCO 问题:在我目前正在处理的应用程序中,我正在使用 POCO 将数据传递到我的 Silverlight 前端(EF 只是没有削减它)。本质上,我使用 EF 建模器创建的实体,将它们按摩成可序列化友好的版本,然后通过网络来回发送它们。 POCO 可以在需要时提供抽象层。我认为它是 DAO 模式对序列化的一种改编,而不是像 DAO 模式通常那样将其用于 DB 访问。

【讨论】:

【参考方案5】:

请参阅http://www.asp.net/entity-framework/tutorials/creating-an-entity-framework-data-model-for-an-asp-net-mvc-application 中有关 POCO 类的段落

本质上,在 EF 的上下文中,POCO 类是不继承自 Entity Framework EntityObject 类的实体类(这是您在 Database First 或 Model First 中默认获得的)。正如其他答案之一所提到的,这使得序列化对象变得更加容易,而且一些开发和自动化测试方法更喜欢使用不引用实体框架的对象。

【讨论】:

以上是关于什么是实体框架流利的 api?的主要内容,如果未能解决你的问题,请参考以下文章

AspNetUser 上的实体框架流利的 api 1:1 属性无法更改 Account_Id 属性

使用实体框架流利语法或内联语法编写递归 CTE

一对零或一关系实体框架

多对多实体框架和存储库模式插入/更新

使用 fluent 为实体框架 4.1 设置递归映射

使用实体框架 Fluent Api 映射 System.Uri