29

我正在使用 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表,因为数据库已经存在。

如何解决这个问题?

4

3 回答 3

57

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

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

您可以在Scott Gu的这篇文章的评论部分看到这一点

于 2013-10-15T14:38:40.250 回答
1

您需要遵循 3 个步骤:

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

Enable-Migrations

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

Add-Migration InitialModel -IgnoreChanges

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

Update-Database
于 2013-11-11T05:04:46.287 回答
-1

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

于 2016-07-12T11:32:52.940 回答