entity-framework - 任何使用 EF 数据库优先方法来解释该主题的 Fluent API 教程?

标签 entity-framework fluent ef-database-first

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

谢谢

最佳答案

没有将 Fluent API 与数据库优先方法一起解释的教程,因为 Fluent API 仅适用于代码优先方法。如果您想通过 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;
                      ..."
    
  • 生成的上下文 DbContext将有一个覆盖 OnModelCreating只抛出异常的方法:
    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        throw new UnintentionalCodeFirstException();
    }
    

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

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

    在这一点上,您不再使用数据库优先,而是代码优先,您阅读的有关 Fluent API 的所有内容都对您有效。

    关于entity-framework - 任何使用 EF 数据库优先方法来解释该主题的 Fluent API 教程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10234094/

    相关文章:

    c# - Entity Framework 中多对多关系中的多个实体

    c# - EF 6 - EntityType 在运行 Enable-Migrations 时没有定义键

    c# - 实体类型 'Access' 需要定义一个主键。如果您打算使用无键实体类型调用 'HasNoKey()'

    mysql - 流畅的多对多关系不起作用

    laravel - 如何使用 Laravel 的 Eloquent/Fluent 将每一行设置为相同的值?

    c# - MVVM-更改 View 模型中的字段时验证模型

    c# - 依赖注入(inject)的 DbContext 始终为 null

    fluent - 在 Fluent+Vapor 中查询子项

    c# - 如何在多个模型中使用同一张表?