任何使用EF Database-First方法解释主题的Fluent API教程?

use*_*769 6 entity-framework fluent ef-database-first

关于Fluent API有许多教程,但它们都使用Entity Framework Code-First代码示例来解释它.由于我不了解Code-First,您知道任何使用EF Database-First方法解释主题的Fluent API教程吗?

谢谢

Sla*_*uma 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 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的所有内容对您都有效.

  • 我会在一两天内将您的帖子标记为已回答,因为您已经回答了我原来的问题,但如果您找到时间 - 我目前正在学习DBContext及其验证API.无论如何,我认为Validation API也可以与Database-First一起使用,即使Database-First不使用Fluent-API? (2认同)