Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.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
C# 实体框架核心:模型创建vs迁移,正确的开发工作流_C#_Asp.net Core_Entity Framework Core - Fatal编程技术网

C# 实体框架核心:模型创建vs迁移,正确的开发工作流

C# 实体框架核心:模型创建vs迁移,正确的开发工作流,c#,asp.net-core,entity-framework-core,C#,Asp.net Core,Entity Framework Core,你能给我解释一下以下两者的区别吗 使用EF-Core属性装饰一个类,例如DataAnnotationsVS,使用OnModelCreating中的代码定义关系和映射 使用dotnet ef migrations创建迁移类添加“xyz”,而不是在ModelCreating上将其配置到 我正试图制定一种“开发工作流程”,但文档并不是很清楚 我发现我应该: 创建第一个“数据库上下文” 创建一组表示我的模型的类 重写建模创建上的以指定每个模型对象的映射策略 执行addmigrations和efupd

你能给我解释一下以下两者的区别吗

  • 使用EF-Core属性装饰一个类,例如DataAnnotationsVS,使用OnModelCreating中的代码定义关系和映射
  • 使用dotnet ef migrations创建迁移类添加“xyz”,而不是在ModelCreating上将其配置到
我正试图制定一种“开发工作流程”,但文档并不是很清楚

我发现我应该:

  • 创建第一个“数据库上下文”
  • 创建一组表示我的模型的类
  • 重写建模创建上的以指定每个模型对象的映射策略
  • 执行
    addmigrations
    efupdate
    的次数与我更改内容的次数相同
  • 这是使用实体框架核心的正确流程吗

    用EF-Core属性修饰一个类,比如DataAnnotations和 使用OnModelCreating中的代码定义关系和 映射

    数据注释是“内联”的,但您将实体与持久性逻辑混合在一起。在我看来,这是个好地方
    OnModelCreating
    使您能够使用“Fluent API”,它更强大、更灵活,但是/并且在某种程度上将持久性逻辑与实体分离。有时,您同时使用数据注释和Fluent API

    使用dotnet ef迁移创建迁移类添加“xyz”VS 将其配置为OnModelCreating

    我不太明白。我看不到迁移的替代方案

    我使用EF(代码优先)的方式是:

  • 我编写实体并向它们添加数据注释
  • 我生成一个迁移并从中获取SQL脚本,然后删除迁移代码
  • 对数据库执行.SQL
  • 运行代码
  • 实体变更
  • 生成新的migration.SQL并将其作为项目的一部分存储
  • 基本上,当您希望更新数据库以与新的/更改的代码兼容时,“迁移”是必要的


    当您必须告诉EF实体如何映射到数据库时,必须进行建模创建。您不应该混淆这两件事。

    dotnet migrations add MigrationName
    以及何时要将迁移应用到数据库
    dotnet ef database update
    @J.Doe这一点很清楚,但是使用ef Core的正确工作流程是什么,以及何时应该使用onmodel创建而不是迁移类?实际上,这就是我的答案需要更好地理解它是如何工作的,因为在我使用每个模型一个类进行映射之前,现在它全部用于onmodel创建。问题是,在您第一次运行代码时,它将创建db表,而无需迁移。