EF Code First from Database-数据库中已有一个对象

本文关键字:一个对象 数据库 Database- Code First from EF | 更新日期: 2023-09-27 18:21:31

我创建了一个新的.NET项目并添加了ADO.NET EF 6。
我浏览了EF向导,并从数据库中选择"代码优先"
然后我选了一张桌子。让我们称之为"产品"
这创建了"公共分部类Product"answers"公共分部类别Model1"。

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

数据库中已存在一个名为"Product"的对象。

当我运行SQL配置文件时,我看到以下内容:

创建表[dbo]。[产品]。。。

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

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

然后我决定尝试创建一个"Migrations"文件夹和一个"内部密封类配置",其中包含以下内容:

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

这给了我一个新的错误。

无法更新数据库以匹配当前模型,因为存在挂起的更改和自动迁移被禁用。要么写挂起对基于代码的迁移的模型更改或启用自动迁移将DbMigrationsConfiguration.AutomaticMigrationsEnabled设置为true以启用自动迁移。

如何解决此问题?

更新
因此,我创建了一个VB.NET和一个C#应用程序,使用完全相同的代码指向同一个数据库
C#版本存在"已在数据库中"的问题
VB.NET版本没有"已在数据库中"的问题。

EF Code First from Database-数据库中已有一个对象

我不知道为什么,但在VB.NET中,"数据库中的代码优先"可以很好地工作,但在C#中,这对EF6来说不正确。

我决定让C#创建"dbo.__MigrationHistory",并发现这非常有效,直到我在数据库中添加了一个与表同名的新类
这导致了以下错误:

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

我再次想到,当我已经有了一个数据库,并试图使用代码优先的"FROM"数据库时,EF为什么需要迁移信息。

因此,通过快速搜索StackOverFlow,我找到了以下文章:
"仅实体框架代码错误:自创建数据库以来,支持上下文的模型已更改"
一旦我在Global.asax中添加了以下代码行,所有代码都开始正常工作。

Database.SetInitializer<YourContext>(null);

您有一个现有的数据库,并且有一个DBA为您负责。您需要更改为实体框架数据库优先方法。这允许您在不修改数据库引用完整性的情况下使用现有数据库。您需要研究数据库优先的方法。此处快速介绍https://msdn.microsoft.com/en-us/data/jj591506.aspx

这里有一个关于这种方法的分步指南https://msdn.microsoft.com/en-us/library/jj200620.aspx.请检查你的步伐。

它看起来像是这个和这个的复制品。关于这个问题还有很多。