1

我得到了这个例外:

自创建数据库以来,支持“数据库”上下文的模型已更改。考虑使用 Code First 迁移来更新数据库 ( 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; }允许空值?或者这个错误还有其他解决方案吗?

更新

如果我添加迁移,并Update-Database按照此处所述更新数据库,受影响表的值会被删除吗?

4

4 回答 4

2

由于 Jon Skeet 的注释字符串是可以为空的类型。

public string MyProperty{get;set;}

MyProperty = null; //this is fine
于 2013-03-25T19:29:18.997 回答
0

尽我所能,抱怨您的后备存储(数据库)中没有 dbLock 列。您需要启用 Code First 迁移,然后更新数据库。或者,如果您还没有数据,只需推送更新,但您几乎肯定最终会想要迁移。

几乎是错误消息所说的。

于 2013-03-25T19:33:55.750 回答
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; }
    }
于 2013-03-25T19:31:57.660 回答
0

如果我添加迁移,并按照此处所述使用 Update-Database 命令更新数据库。受影响表的值会被删除吗?

Changing column to 'nullable'(如果它不是索引)或adding new columns(您的 dbLock) - should not delete data。大多数情况下,EF/CF 迁移值得信赖,只需对现有 Db 结构进行最小的更改 - 当然取决于您所做的更改(我会小心重命名等)。

无论如何,执行Add-Migration- 并查找创建的迁移文件(.cs - 自动为您打开) - 它会告诉您updown部分中的内容。您可以在此处重新检查 EF 为您做了什么。

正如建议的那样,首先备份 - 你很安全。

除此之外 - 即使 Code First(通过迁移)是为了适应对对象的更改 - 它主要用于原型设计和开发 - 并在任何生产环境中尽量减少此类更改,因为事情会变得更加成问题。

于 2013-03-25T21:26:25.927 回答