Context.Database.EnsureCreated()与迁移(Migrations)的区别

情形一

如果找不到数据库,则会自动创建一个数据库并使用测试数据加载。

如果找到数据库,但没有一张表存在,则会自动创建表并使用测试数据加载。

如果找到数据库,表存在但没有数据,则会使用测试数据加载。

情形二

如果找到数据库,具有任何一张表且表中有数据,则不执行任何操作。

情形三

当数据模型(比如添加字段)发生更改时,自然而然紧接着我们需要更新SeedData.csInitialize()方法内的测试数据。

重新启动应用,首先会使用EnsureDeleted()删除数据库以确保数据库在每次执行测试/原型之前处于干净状态,然后会使用EnsureCreated()重新创建新数据库。

应用场景

EnsureCreated() 和 EnsureDeleted() 方法可以被认为提供了一种可用于管理数据库架构的迁移(Migrations)的轻型替代方案。

当数据是暂时性数据,并且可以在架构更改时删除时,这种方案非常有用。例如,在原型制作期间、测试期间或用于本地缓存时。

这种使数据库与数据模型保持同步的方法适用于多种情况,但将应用程序部署到生产环境的情况除外。 当应用程序在生产环境中运行时,它通常会存储要保留的数据,以便不会在每次更改(如添加新列)时丢失所有数据。 EF Core 迁移功能可通过使 EF 更新数据库架构而不是创建新数据库来解决此问题。

某些提供程序(尤其是非关系提供程序)不支持 迁移(Migrations)。 对于这些提供程序,EnsureCreated() 通常是初始化数据库架构的最简单方法。

与迁移(Migrations)的区别

当数据模型(比如添加字段)发生更改时,迁移会修改数据库(不会丢失任何数据),而不会像EnsureCreated()删除和重新创建新数据库。

EnsureCreated() 和 迁移(Migrations) 不能很好地协同工作。如果使用 迁移(Migrations),请勿使用 EnsureCreated() 初始化架构。

从 EnsureCreated() 不能无缝转换到 迁移(Migrations),只能删除数据库,然后使用 迁移(Migrations) 重新创建新数据库。如果预计将来会使用迁移(Migrations),最好从 迁移(Migrations) 开始,而不是使用 EnsureCreated()

原创文章,作者:huoxiaoqiang,如若转载,请注明出处:https://www.huoxiaoqiang.com/experience/csharpe/15165.html

(1)
上一篇 2022年6月4日 18:48
下一篇 2022年6月4日 23:44

相关推荐

  • C#语言的发展介绍

    C#的发音为“See Sharp”,“#”读作“sharp”(/ ʃɑːp /),命名启发于音乐上的音名“C♯”,在音乐中“C♯”表示C升半音,为比C高一点的音节,且“#”形似4个加号,微软借助这样的命名,以表示C#在一些语言特性方面对C++的提升的意思。 由于显示器(标准字体、浏览器等)的技术限制,且大部分的键盘布局…

    C#经验 2021年1月1日
    06070
  • C#语言的GetType()方法

    使用方法 GetType()(被 Object 基类的所有子类型继承)以获取变量类型:

    C#经验 2021年5月5日
    08780
  • ODBC、DAO、RDO、OLE DB、ADO、ADO.NET的区别

    ODBC(Open Database Connectivity,开放数据库互连) ODBC 接口是一个 C 编程语言接口,应用程序可以通过单个接口访问不同 数据库管理系统(DBMS) 中的数据。ODBC 是专为关系数据存储设计的低级别高性能接口。ODBC的设计者们努力使它具有最大的独立性和开放性:与具体的编程语言无关,…

    C#经验 2021年10月11日
    07380

发表回复

登录后才能评论