Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Entity framework 任何使用EF数据库优先方法来解释主题的流畅API教程?_Entity Framework_Fluent_Ef Database First - Fatal编程技术网

Entity framework 任何使用EF数据库优先方法来解释主题的流畅API教程?

Entity framework 任何使用EF数据库优先方法来解释主题的流畅API教程?,entity-framework,fluent,ef-database-first,Entity Framework,Fluent,Ef Database First,有很多关于FluentAPI的教程,但都是使用实体框架代码先行代码示例来解释的。因为我不知道代码第一,你知道有任何流畅的API教程可以解释使用EF数据库第一方法的主题吗 谢谢本教程由6部分组成,第一个教程系列包括一些fluent API示例: 没有教程可以解释Fluent API和数据库优先方法,因为Fluent API只针对代码优先方法。如果您想首先通过数据库创建模型,则不需要fluentapi Fluent API(连同代码优先数据注释和约定)是一种工具,用于定义代码中的模型细节,如字符串长

有很多关于FluentAPI的教程,但都是使用实体框架代码先行代码示例来解释的。因为我不知道代码第一,你知道有任何流畅的API教程可以解释使用EF数据库第一方法的主题吗


谢谢

本教程由6部分组成,第一个教程系列包括一些fluent API示例:


没有教程可以解释Fluent API和数据库优先方法,因为Fluent API只针对代码优先方法。如果您想首先通过数据库创建模型,则不需要fluentapi

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

如果首先通过数据库或模型创建模型,则将有一个表示模型的EDMX文件。您可以将T4 DbContext生成器应用于此EDMX文件。生成的文件有两个不同于第一个代码的特征:

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

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

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        throw new UnintentionalCodeFirstException();
    }
    
只要您将元数据部分保留在连接字符串中,EF甚至不会在ModelCreating上调用
,也不会在此方法中调用Fluent API中的任何代码。元数据部分告诉EF您的模型首先是DB-or模型,元数据是在嵌入式EDMX中定义的,而不是在Fluent API中定义的

但是,您可以从连接字符串中删除元数据部分,删除
意外的CodeFirstException
,并在
OnModelCreating
中使用Fluent API编写代码。您可以按照以下步骤首先通过数据库创建初始模型,然后在此初始模型上构建,以便首先使用代码进行进一步开发


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

有一篇有趣的文章介绍了如何在不使用实际的“数据库优先”方法的情况下实现一些“数据库优先”的目标

作者使用“代码优先”和“Fluent API”,但禁用数据库和表的自动生成和种子设定

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


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

由于您已经回答了我的原始问题,我会在一两天后将您的帖子标记为已回答,但如果您有时间,我目前正在学习DBContext及其验证API。无论如何,我假设验证API也可以首先用于数据库,即使Database First不使用Fluent API?@user702769:Hm,好问题。。。我真的不知道。我从来没有先对数据库使用过验证功能。也许你会问一个新问题,我会的。非常感谢你的帮助