关于使用CodeFirst,修改类或上下文时操作数据库报错解决方法

在操作已经创建好的数据库时,若是添加新的实体类或者修改原有数据库上下文,会报如下错误:

The model backing the 'StudentDbContext' context has changed since the database was created. Consider using Code First Migrations to update the database(http://go.microsoft.com/fwlink/?LinkId=238269).

解决方法:思路是按照提示 进行EF Code First数据库迁移。

先在出错的数据库上下文中添加如下代码:

static StudentDbContext()
{
    Database.SetInitializer<StudentDbContext>(null);
}


再按序执行以下操作:
1>、在程序包管理器控制台,执行语句:

PM> Enable-Migrations -EnableAutomaticMigrations
 执行成功后,在应用程序代码结构中,添加Migrations文件夹,并生成类文件Configuration.cs。

2>、在程序包管理器控制台,执行语句:

PM> Add-Migration InitialCreate
3>、在程序包管理器控制台,执行语句:

PM> Update-Database -Verbose
执行完这些后,继续操作数据库,就不会再出现如上错误。



备注:修改完以上错误后,当再次修改该数据库上下文,在里面重写OnModelCreating()函数时,会报错:An error occurred while updating the entries. See the inner exception for details。


解决该错误:删除所连数据库,删除以下代码:


static StudentDbContext()
{
    Database.SetInitializer<StudentDbContext>(null);
}


当再在数据库上下文中重写OnModelCreating()函数就不会报错了。

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
    modelBuilder.Entity<Person>().Map(m =>
    {
        m.ToTable("Person");
        m.Requires("PersonType").HasValue("Person");
     }).Map<NewStudent>(m =>
    {
        m.Requires("PersonType").HasValue("NewStudent");
     });         
 }



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值