我遇到了这个例外:
自创建数据库以来,支持“数据库”上下文的模型已更改。考虑使用Code First Migrations来更新数据库(http://go.microsoft.com/fwlink/?LinkId=238269)。
据我所知,当您更改代表数据库表的模型并且您的数据库具有相同的属性(表和字段)时,会出现该错误(如果我错了,请纠正我)。
数据库中的 Tbl_Users
具有以下结构
dbUser(int,not null)//key
dbUserId(varchar(50),null)//allow null, right?
dbPassWord(varchar(20),null)
这是模型:
public class Tbl_Users {
[Key,DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int dbUser { get; set; }
[MaxLength(50)]
public string dbPassWord { get; set; }
[MaxLength(20)]
public string dbUserID{ get; set; }
public int? dbLock { get; set; }
}
如何设置public string dbPassWord { get; set; }
和public string dbPassWord { get; set; }
以允许空值?
或者是否有其他解决方案可以解决此错误?
更新
如果我添加了迁移,并且我按照here的Update-Database
更新了数据库,那么受影响的表的值是否会被删除?
答案 0 :(得分:2)
由于Jon Skeet的评论字符串是可以为空的类型。
public string MyProperty{get;set;}
MyProperty = null; //this is fine
答案 1 :(得分:0)
您的MaxLength属性是否已切换?它们与数据库不匹配:
public class Tbl_Users {
[Key,DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int dbUser { get; set; }
[MaxLength(20)]
public string dbPassWord { get; set; }
[MaxLength(50)]
public string dbUserID{ get; set; }
public int? dbLock { get; set; }
}
答案 2 :(得分:0)
这是我能说的最好,抱怨你的后备存储(数据库)中没有dbLock列。您需要启用Code First迁移,然后更新数据库。或者,如果您还没有数据,只需推送更新,但您最终肯定会想要迁移。
几乎是错误消息所说的内容。
答案 3 :(得分:0)
如果我添加迁移,我使用Update-Database更新数据库 在这里告诉命令。是否会删除受感染表格的值?
Changing column to 'nullable'
(提供它不是索引)或adding new columns
(您的dbLock) - should not delete data
。大多数情况下,EF / CF迁移只需对现有Db结构进行最小的更改即可信任 - 当然取决于您所做的更改(我要小心重命名等)。
无论如何,请执行Add-Migration
- 并查找创建的迁移文件(.cs - 自动为您打开) - 它会告诉您up
和down
部分中的内容。您可以在这里重新检查EF为您做什么。
正如所建议的那样,首先备份 - 你是安全的。
除此之外 - 尽管Code First(通过迁移)是为了适应对象的变化 - 它主要用于原型设计和开发 - 并且在任何生产环境中最小化这些变化,因为事情会变得更加棘手。