2013-02-14 90 views
2

我在完全由EF-CodeFirst创建现有数据库已经一个View,现在我已经添加了ViewEntity但是当我运行我的应用程序,它抛出一个异常说:There is already an object named 'View' in the database。我应该如何解决这个问题?如何强制EF-CodeFirst忽略创建现有视图?

+1

如果您改为创建基于代码的迁移,并用'Sql'调用创建您的视图(您的视图不能存在于数据库中),将'CreateTable '和所有相关的'AddColumn'调用替换为什么? – 2013-02-14 19:07:36

+0

其你拉迪斯拉夫EntityFramework的神:P;),你能解释我应该怎么做?我不太熟悉EF-CodeFirst中的迁移。 – saber 2013-02-14 19:13:04

+0

您使用自动迁移吗?为了让自己更熟悉迁移,请查看@ZackT在他的评论中提供的链接。 – 2013-02-14 19:18:35

回答

1

解释正在发生的事情:
您收到此错误,因为数据库中已经有一个对象(图或表格等)称为“视图”和EF-代码先用迁移正在试图重新创建它。

当您运行应用程序时,EF Code First会在数据库中查找dbo .__ MigrationHistory表(通常位于系统表中)。此表记录了迁移的情况。看看这个表,看看迁移是否创建并正确填充它。

为你解答:
确保你第一次使用正确迁移和EF-代码。如果可以,请尝试删除现有的视图(或表格),然后让EF再次创建它。此时,如果迁移设置正确,则迁移表应该使用迁移“升级”自己,并在MigrationHistory表中包含该条目。

+0

是的,我正在使用迁移,但另一个问题根据你已经解释的问题公开,是否有一种特殊的方式来在EF-CodeFirst中创建视图?因为我手动在数据库中创建视图。 – saber 2013-02-14 18:02:41

+1

我在我的模型中添加了一个类,并使用实体框架代码优先迁移文章的[生成和运行迁移](http://msdn.microsoft.com/zh-cn/data/jj591621)部分中的信息数据开发人员中心能够用新表格更新数据库。 – Zack 2013-02-14 18:53:34