【问题标题】:Invalid object name 'dbo.EdmMetadata' and 'dbo.__MigrationHistory'无效的对象名称“dbo.EdmMetadata”和“dbo.__MigrationHistory”
【发布时间】:2013-10-15 11:20:34
【问题描述】:

我正在使用 Entity Framework 5 并执行一个简单的查询以从表中获取一些用户。

SQL 数据库已经创建,所以我使用我的实体来映射我所拥有的。

当我运行查询时,我检测到其他查询已执行,其中 2 个出现错误:

查询 1

错误:无效的对象名称“dbo.__MigrationHistory”。

SELECT
[GroupBy1].[A1] AS [C1]
FROM ( 
    SELECT
        COUNT(1) AS [A1]
    FROM [dbo].[__MigrationHistory] AS [Extent1]
) AS [GroupBy1]

查询 2

错误:无效的对象名称“dbo.EdmMetadata”。

SELECT TOP (1)
   [Extent1].[Id] AS [Id],
   [Extent1].[ModelHash] AS [ModelHash]
FROM [dbo].[EdmMetadata] AS [Extent1]
ORDER BY [Extent1].[Id] DESC

这是为什么呢?

我的数据库中没有dbo.EdmMetadatadbo.__MigrationHistory 表,因为数据库已经存在。

如何解决?

【问题讨论】:

    标签: entity-framework


    【解决方案1】:

    由于数据库已经存在,您将不会拥有 codefirst 所期望的 dbo.EdmMetadatadbo.__MigrationHistory。要解决此问题,您可以尝试将 SetInitializer 设置为 null。

     static NameOfYourContext()
     {
       Database.SetInitializer<NameOfYourContext>(null);        
     }      
    

    你可以在Scott Gu这篇帖子的cmets部分看到这个

    【讨论】:

    • 效果很好。请注意,您的构造函数可能不是static,并且上面的代码不存在非空参数——您必须添加整行。
    【解决方案2】:

    您需要遵循 3 个步骤:

    1- 如果您尚未完成,请在包管理器中启用迁移:

    Enable-Migrations
    

    2- 添加迁移并确保使用 -IgnoreChanges 开关,因为您已经拥有现有数据库:

    Add-Migration InitialModel -IgnoreChanges
    

    3- 更新数据库。这将自动为您创建 __MigrationHistory 表。

    Update-Database
    

    【讨论】:

      【解决方案3】:

      我禁用了我的异常设置。它忽略了这个异常并继续为我自动创建这些表

      【讨论】:

      • 请提供关于如何“禁用异常设置”的代码示例。否则,这不是一个有用的答案。
      猜你喜欢
      • 2016-09-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-01-19
      • 1970-01-01
      • 2016-05-01
      • 1970-01-01
      相关资源
      最近更新 更多