【发布时间】:2013-09-22 16:45:19
【问题描述】:
我正在学习实体框架(目前使用的是 EF6 测试版),并且我正在现有数据库上使用代码优先模式。实体和DbContext 类是使用 T4 模板自动创建的。
我想阻止 DbContext 在运行时创建/更改数据库中的任何内容。
我该怎么做?
【问题讨论】:
-
您是如何创建数据库的?默认情况下,EF Code First 会向数据库添加一个表,以便能够判断您的模型是否已更改。如果数据库不是由 codefirst/migrations 创建的,则 db 中没有数据,并且 EF 不会触及数据库的架构。如果您在谈论数据 - 任何时候调用 .SaveChanges() 数据库中的数据都可以添加/修改/删除
-
CodeFirst 不会更改您的数据库,如果它没有创建它。
-
它确实创建了新对象,因为我一开始没有正确映射模式。我最终在默认 dbo 架构中重新创建了所有表。
-
是的,它创建了新对象,因为它找不到任何对象,因为它们没有在默认模式中定义。请注意,由于它创建了表,因此它还添加了迁移历史表,其中保存了有关模型的信息。因此,它能够判断模型已更改,但与它创建的表相比,而不是已经存在的表。它还将使用它创建的表而不是原始表。如果您更改模型禁用初始化程序后,您的模型将不再匹配数据库,并可能导致运行时问题或数据损坏。
-
您应该使用
.ToTable(tableName, schemaName)映射到非默认架构中的表。
标签: .net database entity-framework orm code-first