数据库中的EF代码优先 - 已经是数据库中的对象

时间:2015-11-11 22:28:57

标签: c# entity-framework entity-framework-6

我创建了一个新的.NET项目并添加了ADO.NET EF 6 我浏览了EF向导,从数据库中选择Code First 然后我选了一张桌子。我们称之为“产品” 这创建了“公共部分类产品”和“公共部分类Model1”。

我立即在我的应用程序中创建了一个LINQ查询来查询“产品”,但是我收到以下错误。

  

数据库中已有一个名为“Product”的对象。

当我运行SQL Profile时,我看到以下内容:

  

CREATE TABLE [dbo]。[Product] ...

我不明白为什么项目正在尝试创建表,因为表已经存在。

我读了几篇文章,告诉我需要启用迁移,但我真的不希望我的项目能够在数据库中创建表。
(我们有一个DBA,它不允许我们“轻松地”在数据库中创建表格

然后我决定尝试使用以下内容创建“Migrations”文件夹和“内部密封类配置”:

public Configuration()
{
    AutomaticMigrationsEnabled = false;
    AutomaticMigrationDataLossAllowed = false;
}

这给了我一个新的错误。

  

无法更新数据库以匹配当前模型,因为有   挂起的更改和自动迁移已禁用。要么写   待定模型更改为基于代码的迁移或启用自动   移民。将DbMigrationsConfiguration.AutomaticMigrationsEnabled设置为   如果启用自动迁移,则为true。

如何修复此问题?

更新
所以我创建了一个VB.NET和一个C#应用程序,其中完全相同的代码指向同一个数据库 C#版本具有“已在数据库中”的问题 VB.NET版本没有“已在数据库中”的问题。

3 个答案:

答案 0 :(得分:0)

我不确定为什么但是在VB.NET中,数据库中的Code First工作正常但在C#中这对EF6不起作用。

我决定让C#创建“dbo .__ MigrationHistory”并发现这很有用,直到我添加了一个与数据库中的表同名的新类。
这导致以下错误:

  

自创建数据库以来,支持'TEST'上下文的模型已更改。手动删除/更新数据库,或使用IDatabaseInitializer实例调用Database.SetInitializer。

我再次想到,当我已有数据库并且尝试使用Code First“FROM”数据库时,为什么EF需要迁移信息。

因此,快速StackOverFlow搜索引导我阅读以下文章:
Entity Framework Code Only error: the model backing the context has changed since the database was created
一旦我在Global.asax中添加了以下代码行,那么所有代码​​都开始正常工作。

Database.SetInitializer<YourContext>(null);

答案 1 :(得分:-1)

您有一个现有的数据库,并且您有一位DBA负责人为您服务。您需要更改为Entity Framework Database First Approach。这允许您使用现有数据库而无需修改数据库参照完整性。您需要研究数据库优先方法。这里快速介绍https://msdn.microsoft.com/en-us/data/jj591506.aspx

答案 2 :(得分:-1)

这里有一个循序渐进的指南 https://msdn.microsoft.com/en-us/library/jj200620.aspx。请检查您的步骤。

它看起来像是thisthis的副本。关于这个问题还有更多。