错误信息:

“自数据库创建以来,支持‘AddressBook’上下文的模型已经发生了变化。手动删除/更新数据库,或者调用database。带有IDatabaseInitializer实例的SetInitializer。例如,RecreateDatabaseIfModelChanges策略将自动删除并重新创建数据库,并可选地为其添加新数据。”

我正在尝试使用代码优先功能,以下是我写的:

var modelBuilder = new ModelBuilder();
var model = modelBuilder.CreateModel();
using (AddressBook context = new AddressBook(model))
{
    var contact = new Contact
    {
        ContactID = 10000,
        FirstName = "Brian",
        LastName = "Lara",
        ModifiedDate = DateTime.Now,
        AddDate = DateTime.Now,
        Title = "Mr."

    };
    context.contacts.Add(contact);
    int result = context.SaveChanges();
    Console.WriteLine("Result :- "+ result.ToString());
}

上下文类:

public class AddressBook : DbContext
{
    public AddressBook()
    { }
    public AddressBook(DbModel AddressBook)
        : base(AddressBook)
    {

    }
    public DbSet<Contact> contacts { get; set; }
    public DbSet<Address> Addresses { get; set; }
}

和连接字符串:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <connectionStrings>
    <add name="AddressBook" providerName="System.Data.SqlClient"  
         connectionString="Data Source=MyMachine;Initial Catalog=AddressBook;
         Integrated Security=True;MultipleActiveResultSets=True;"/>
    </connectionStrings>
</configuration>

因此,数据库名称是“AddressBook”,当我试图将联系人对象添加到上下文时发生错误。我遗漏了什么吗?


当前回答

此错误可能表明连接字符串有问题,以及连接字符串名称是否与数据库上下文声明匹配。

我有这个错误,因为我错误地命名了本地数据库(愚蠢的错误)和web中的连接字符串的名称。“DefaultConnection”的配置与MyDbContext不匹配。

public MyDbContext(): base("DefaultConnection")
{}


<connectionStrings>
    <add name="DefaultConnection" ...
  </connectionStrings>

其他回答

这意味着上下文上的一些更改还没有执行。 请先运行Add-Migration来生成我们所做的更改(我们可能没有意识到的更改) 然后运行Update-Database

此修复在CTP5之后不再有效。

你必须执行database。setinitializer <YourContext>(null);

在这里,我想分享另一种防止上下文改变时模型备份错误的方法:

1)打开DbContext文件

2)使用Microsoft.AspNet.Identity.EntityFramework添加命名空间;

3) public MyDbContext() : base(“name=MyDbContext”) { Database.SetInitializer(new DropCreateDatabaseAlways()); }

在对这个主题进行了一些研究之后,我发现如果您之前在本地sql server express上创建了一个db实例,就会发生这个错误。因此,无论何时你在db上有更新,并试图更新db/在db上运行一些代码,而不使用包管理器控制台运行更新数据库命令;首先,您必须手动删除本地SQL express上以前的db。

此外,除非你的配置中有AutomaticMigrationsEnabled = false;,否则这个解决方案是有效的。

如果你使用版本控制系统(git,svn等)和其他一些开发人员在生产阶段更新db对象,那么每当你更新代码库并运行应用程序时,这个错误就会出现。

如上所述,在代码基础上有一些解决方案。然而,在某些情况下,这是最实用的方法。

检查以下步骤

Database.SetInitializer(空);——> Global.asax.cs

2.

你的Context类名应该与之匹配 检查它