已经是数据库中的一个对象
我创建了一个新的.NET项目并添加了ADO.NET EF 6。
我通过EF向导并选择了从数据库中选择Code First。
然后我选择了一张桌子。 我们称之为“产品”。
这就创建了“公共部分类产品”和“公共部分类Model1”。
我立即在我的应用程序中创建了一个LINQ查询来查询“产品”,但我得到以下错误。
数据库中已经有一个名为'Product'的对象。
当我运行SQL配置文件时,我看到以下内容:
CREATE TABLE [dbo]。[Product] ...
我不明白为什么该项目试图创建表,因为表已经存在。
我读了几篇文章,告诉我需要启用迁移,但我真的不希望我的项目能够在数据库中创建表。
(我们有一个DBA,它不允许我们在数据库中“轻松”创建表)
然后我决定尝试创建一个“Migrations”文件夹和一个“内部密封类配置”,其中包含以下内容:
public Configuration()
{
AutomaticMigrationsEnabled = false;
AutomaticMigrationDataLossAllowed = false;
}
这给了我一个新的错误。
无法更新数据库以匹配当前模型,因为有未决的更改并且自动迁移已禁用。 将挂起的模型更改写入基于代码的迁移或启用自动迁移。 将DbMigrationsConfiguration.AutomaticMigrationsEnabled设置为true以启用自动迁移。
如何解决这个问题?
UPDATE
所以我创建了一个VB.NET和一个C#应用程序,并使用完全相同的代码指向同一个数据库。
C#版本的“已存在数据库”问题。
VB.NET版本没有“已存在的数据库”问题。
我不知道为什么,但在VB.NET中Code First from Database工作正常,但在C#中这对于EF6无法正常工作。
我决定让C#创建“dbo .__ MigrationHistory”,并发现这很有效,直到我添加了一个与数据库中的表名称相同的新类。
这导致了以下错误:
自从创建数据库以来,支持'TEST'上下文的模型已经发生了变化。 可以手动删除/更新数据库,也可以使用IDatabaseInitializer实例调用Database.SetInitializer。
我再次想到,为什么当我已经拥有一个数据库并试图使用Code First“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。 请检查你的步骤。
它看起来像这个和这个重复。 这个问题上还有很多。
链接地址: http://www.djcxy.com/p/90285.html上一篇: Already an object in the database
下一篇: Enzyme Throws an error if the React Component requires jQuery