我创建了一个新的.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版本没有“已在数据库中”的问题。
答案 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。请检查您的步骤。