use*_*769 6 entity-framework fluent ef-database-first
关于Fluent API有许多教程,但它们都使用Entity Framework Code-First代码示例来解释它.由于我不了解Code-First,您知道任何使用EF Database-First方法解释主题的Fluent API教程吗?
谢谢
没有教程可以解释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 Generator应用于此EDMX文件.生成的文件有两个与Code-First不同的特征:
生成的连接字符串包含一个部分,该部分引用将嵌入到程序集中的EDMX元数据:
connectionString="metadata=res://*/Model.csdl
|res://*/Model.ssdl
|res://*/Model.msl;
..."
Run Code Online (Sandbox Code Playgroud)生成的上下文DbContext将有一个重写的OnModelCreating方法,它只会抛出异常:
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
throw new UnintentionalCodeFirstException();
}
Run Code Online (Sandbox Code Playgroud)只要将元数据部分保留在连接字符串中,EF就不会OnModelCreating在此方法中调用Fluent API中的任何代码.元数据部分告诉EF您的模型是DB或Model-First,元数据是在嵌入式EDMX中定义的,而不是在Fluent API中定义的.
但是,您可以从连接字符串中删除元数据部分,UnintentionalCodeFirstException使用Fluent API 删除和编写代码OnModelCreating.您可以按照此过程通过Database-First创建初始模型,然后构建此初始模型,以便使用Code-First进行进一步开发.
此时您不再使用Database-First,而是使用Code-First,而您阅读的有关Fluent API的所有内容对您都有效.