【问题标题】:EF Code First from Database - Already an object in the databaseEF Code First from Database - 已经是数据库中的一个对象
【发布时间】:2015-11-11 22:28:56
【问题描述】:

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

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

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

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

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

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

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

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

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

这给了我一个新的错误。

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

我该如何解决这个问题?

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

【问题讨论】:

  • 你试过在你的包管理器控制台上执行这两个命令吗? “添加迁移”然后是“更新数据库”。 This 可以帮到你。
  • @Kosala 是的,我有并且这些命令试图在数据库中创建一个名为“dbo.__MigrationHistory”的表。我正在尝试使用数据库中的 Code First 而不向数据库中添加更多表。

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


【解决方案1】:

我不知道为什么,但在 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);

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • Microsoft 要求在 EF 7 中使用 Code First 类型方法(没有数据库设计器),并且他们已经从数据库中获得了 EF 6 Code First,因此我想尽可能尝试使用它。
    【解决方案3】:

    这里有此方法的分步指南 https://msdn.microsoft.com/en-us/library/jj200620.aspx。请检查您的步骤。

    它看起来像是 this 和 this 的副本。关于这个主题还有很多。

    【讨论】:

    • 微软指南告诉你如何使用我已经在做的数据库中的 EF Code First。该指南没有告诉用户我遇到的“迁移”问题。您列出的第二个链接不是重复的,因为该链接适用于没有现有数据库的 EF Code First。第三个链接使用我试图不做的“更新数据库”。如果可能,DBA 不希望我在数据库中插入表。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-12-17
    • 1970-01-01
    • 1970-01-01
    • 2014-10-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多