0

我使用 EF(代码优先)创建了一个 MVC 4 应用程序,它映射到我使用 SQL Management Studio 创建的表和视图的混合,效果很好。

我已经开始了一个新的 MVC 4 项目,其方式与第一个项目大致相同,使用的是完全不同的数据库,但是这一次,每当我尝试使用映射到视图(而不是表)的模型时,都会引发异常说“名称为 xxx 的对象已存在”。SQL 分析器显示 EF 正在尝试为我的模型创建一个表。

我发现如果我删除视图,让 EF 从模型创建表,然后删除表并手动替换它们,应用程序将工作大约 2 分钟,从我的视图中读取和使用信息,但最终抛出同样的例外。

我不知道这里发生了什么。

导致异常的代码是:

repository.Customers.OrderBy(c => c.AccountNumber);

模型在哪里:

public class Customer
{
    public int Id {get;set;}
    public string AccountNumber {get;set;}
    public string Name {get;set;}
}
4

2 回答 2

1

好的 - 此问题的可能原因隐藏在您的上下文文件中。可能有一个类似于下面的语句,它试图在模型更改时更新您的数据库。

   protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        Database.SetInitializer<MyContext>(new DropCreateDatabaseIfModelChanges<MyContext>());
    }   

我一般不使用这种方法。我更喜欢删除数据库并使用包管理器控制台重新生成它。(查看包管理器控制台的 update-database 方法)

于 2013-09-10T15:10:14.543 回答
0

Using Greg's hint I was able to arrive at the point where I simply added:

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
    Database.SetInitializer<MyContext>(null);
}

to the context class and this has solved the issue. My understanding here is that I have told EF to do no initialisation, essentially having it map to an existing database that is maintained outside of the code first context.

I have voted up Greg's response as it was the help I needed but creating a new answer as it was the above that solved it eventually. I hope this was done right.

于 2013-09-11T08:40:01.163 回答