6

关于 Fluent API 的教程有很多,但它们都使用 Entity Framework Code-First 代码示例对其进行了解释。由于我不知道 Code-First,您是否知道任何 Fluent API 教程可以使用 EF Database-First 方法解释该主题?

谢谢

4

3 回答 3

8

没有教程可以解释 Fluent API 和 Database-First 方法,因为 Fluent API 仅适用于 Code-First 方法。如果您想通过 Database-First 创建模型,则不需要 Fluent API。

Fluent API(连同 Code-First 数据注释和约定)是一种在代码中定义模型细节的工具,例如字符串长度、是否需要属性或关系类型 - 多对多、一对多等。当使用 Database-First 或 Model-First 时,EDMX 文件具有相同的目的 - 它包含模型的所有详细信息和映射定义。Fluent API(+ 数据注释和约定)仅在使用 Code-First 时替换 EDMX 文件。

如果您通过 Database-First 或 Model-First 创建模型,您将拥有一个代表您的模型的 EDMX 文件。您可以将 T4​​ DbContext 生成器应用于此 EDMX 文件。生成的文件有两个不同于 Code-First 的特征:

  • 生成的连接字符串包含一个引用 EDMX 元数据的部分,该元数据将嵌入到您的程序集中:

    connectionString="metadata=res://*/Model.csdl
                              |res://*/Model.ssdl
                              |res://*/Model.msl;
                      ..."
    
  • 生成的上下文DbContext将有一个重写的OnModelCreating方法,它只是抛出一个异常:

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        throw new UnintentionalCodeFirstException();
    }
    

只要您将元数据部分留在连接字符串中,EF 甚至不会OnModelCreating在此方法中调用 Fluent API 中的任何代码或任何代码。元数据部分告诉 EF 您的模型是 DB 优先或模型优先,并且元数据是在嵌入式 EDMX 中定义的,而不是在 Fluent API 中定义的。

但是,您可以从连接字符串中删除元数据部分,删除UnintentionalCodeFirstException并使用 Fluent API in 编写代码OnModelCreating。您可以按照此过程通过 Database-First 创建初始模型,然后在此初始模型上构建以使用 Code-First 进行进一步开发。

此时,您不再使用 Database-First,而是 Code-First,并且您阅读的有关 Fluent API 的所有内容都对您有效。

于 2012-04-19T21:39:53.663 回答
2

有一篇有趣的文章是关于在不使用实际的“数据库优先”方法本身的情况下完成一些“数据库优先”的目标。

http://agilenet.wordpress.com/2011/04/11/entity-framework-4-1-rc-with-an-existing-database/

作者使用“Code-First”和“Fluent API”,但禁用了数据库和表的自动生成和播种。

他分享了一个示例,展示了“如何创建实体模型,然后手动创建数据库,然后将这些实体映射到您的数据库。最后它展示了使用 DatabaseContext 来保存和检索实体”。

他为“在实体和数据库之间映射的每个实体创建配置类”的部分非常酷。该步骤取代了在采用正式的“数据库优先”方法时生成的“edmx”文件。

于 2013-02-20T17:31:57.613 回答
0

本教程包含 6 部分 Database First 教程系列,包括一些流畅的 API 示例:

http://www.asp.net/web-forms/tutorials/continuing-with-ef/using-the-entity-framework-and-the-objectdatasource-control-part-3-sorting-and-filtering

于 2012-04-19T21:39:30.887 回答