【问题标题】:Lifetime of database created using EF Code First使用 EF Code First 创建的数据库的生命周期
【发布时间】:2014-05-16 22:18:58
【问题描述】:

使用 EF Code First 创建了一个数据库后,我很好奇记录在我添加到其中的数据库中保留了多长时间?停止调试器时,记录仍然存在,因此它们不像仅在程序运行时存在。

但是假设我现在创建了 10000 条记录。我可以依靠数据库不被删除或其记录,例如关掉电脑?或者数据库实际上会在我离开时保留吗?然后假设我已连接到数据库,以后从我的程序执行的任何操作都只会更改现有数据库及其所有记录?

我只是对要添加大量数据的数据库的生命周期范围感到困惑。

【问题讨论】:

  • 如果您已将其附加到 SQL Server 数据库,那么数据应该是持久的。
  • 通常 RDBMS 保证持久性:如果您保存了数据并提交了事务 - 数据将保持持久化。直到您删除数据为止。
  • 数据库的生命周期取决于存储它的磁盘的生命周期。如果您想将数据保存更长时间,您应该确定有一个强大的备份计划。
  • 我对这个问题感到困惑,它被标记为 SQL 服务器,所以它是一个数据库服务器 - 你是在问数据是否会从数据库中随机删除!? SQL Server 不是内存数据库 - 它将数据存储在硬盘驱动器上的文件中,因此假设您不删除 MDB 文件,它将保留。

标签: c# .net sql-server database entity-framework


【解决方案1】:

这取决于您在 Code-First 代码中使用的数据库初始化策略。

例如,如果您将其设置为 DropCreateDatabaseIfModelChanges 并通过添加或删除属性来更改 C# 代码中的模型,然后运行项目,它将 DROP 数据库,基本上删除所有记录您在所有表中都有,并使用新架构重新创建一个空数据库。

如果您不想丢失添加的数据,您应该通过重写 Seed() 方法以编程方式添加数据,或者创建一个 Visual Studio 数据库项目,然后导入架构和数据放入其中。当您对数据库模型进行更新时,第一种播种数据的方法更简洁、更易于维护。

这里是其他代码优先中的数据库初始化策略

  1. CreateDatabaseIfNotExists:这是默认初始化程序。顾名思义,如果不存在,它将根据配置创建数据库。但是,如果您更改模型类,然后使用此初始化程序运行应用程序,那么它将引发异常。

  2. DropCreateDatabaseIfModelChanges:如果您的模型类(实体类)已更改,此初始化程序将删除现有数据库并创建新数据库。因此,当模型类更改时,您不必担心维护数据库模式。

  3. DropCreateDatabaseAlways:顾名思义,无论您的模型类是否已更改,每次运行应用程序时,此初始化程序都会删除现有数据库。当您在开发时每次运行应用程序时都需要新的数据库时,这将很有用。

  4. 自定义 DB 初始化器:如果以上任何一项不满足您的要求,或者您想在使用上述初始化器初始化数据库时执行一些其他过程,您也可以创建自己的自定义初始化器。

来源:entityframeworktutorial.net / Database Initialization Strategies in Code-First

【讨论】:

    猜你喜欢
    • 2012-03-15
    • 1970-01-01
    • 1970-01-01
    • 2020-12-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-22
    • 1970-01-01
    相关资源
    最近更新 更多