实体框架代码如何以及何时首先生成数据库

本文关键字:何时首 先生 数据库 框架 代码 实体 | 更新日期: 2023-09-27 17:56:51

>我遇到了这个相关的问题:如何从实体框架 4.3 代码优先模型生成 DDL 脚本?

但这似乎并没有回答Code First应用程序何时实际检查数据库的存在/正确性并在必要时对其进行修改的问题。是在运行时还是在构建时?假设它是在运行时,是在启动时还是在创建 DbContext 时,或者在最后可能的时刻,例如,当您尝试写入/读取数据库表时,它会根据具体情况检查它们是否存在?

实体框架代码如何以及何时首先生成数据库

它在

你第一次访问实体时被占用,即,

using (var db = new MyDBContext())
{
   var items = db.MyObj.Count() // <- Here it is created!
}

有一些关于如何的方式,例如是否将创建策略设置为CreateDatabaseIfNotExists,DropCreateDatabaseAlways等。请看一下:

http://www.entityframeworktutorial.net/code-first/database-initialization-strategy-in-code-first.aspx

表中的列 模型 __MigrationHistoryEDMX 的序列化和 gzipped(base64) 版本。首先在代码中,列 Model 由 Add-Migration 生成,并存储在迁移分部类的第二部分,并在将数据库创建为二进制流 varbinary(max) 时存储在数据库中。

调用数据库初始值设定项(

数据库.设置初始值设定项)时,EF 会动态(运行时)从类生成当前实体数据模型 (EDMX)。生成的模型将被序列化、压缩(base64),最后将其与迁移历史记录表的存储模型进行比较。

比较发生在创建 DbContext 之前,如果两个模型(二进制流)不相同,则会出现兼容性异常