关于 Fluent API 的教程有很多,但它们都使用 Entity Framework Code-First 代码示例对其进行了解释。由于我不知道 Code-First,您是否知道任何 Fluent API 教程可以使用 EF Database-First 方法解释该主题?
谢谢
关于 Fluent API 的教程有很多,但它们都使用 Entity Framework Code-First 代码示例对其进行了解释。由于我不知道 Code-First,您是否知道任何 Fluent API 教程可以使用 EF Database-First 方法解释该主题?
谢谢
没有教程可以解释 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 的所有内容都对您有效。
有一篇有趣的文章是关于在不使用实际的“数据库优先”方法本身的情况下完成一些“数据库优先”的目标。
http://agilenet.wordpress.com/2011/04/11/entity-framework-4-1-rc-with-an-existing-database/
作者使用“Code-First”和“Fluent API”,但禁用了数据库和表的自动生成和播种。
他分享了一个示例,展示了“如何创建实体模型,然后手动创建数据库,然后将这些实体映射到您的数据库。最后它展示了使用 DatabaseContext 来保存和检索实体”。
他为“在实体和数据库之间映射的每个实体创建配置类”的部分非常酷。该步骤取代了在采用正式的“数据库优先”方法时生成的“edmx”文件。
本教程包含 6 部分 Database First 教程系列,包括一些流畅的 API 示例: