1

我正在使用 EntityFramework 5.0,并且我有一个已经存在的数据库,但我想为它定义自己的模型,所以我做了这样的事情:

pubilc class MyContext : DbContext
{
    public MyContext()
    {
        Whatevers = Set<Whatever>();
    }

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        //.. Deal with all the mappings between the real database and
        // my beautiful model
    }

    pubilc DbSet<Whatever> Whatevers { get; private set;}
}

public class Whatever
{
   //... you get the gist...
}

它工作正常,除了我第一次启动应用程序时它尝试执行这两个查询:

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

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

现在,这些表都不存在,因此我得到错误,我真的不希望它们出现(这是一个已经存在一段时间的数据库,我只是一个低级的应用程序开发人员而不是数据库霸主)。

我看到了这个问题:How to disable migration in Entity Framework 4.3.1? 这表明了这一点:

Database.SetInitializer<YourContextType>(new CreateDatabaseIfNotExists());

根据 MSDN,这是默认设置,至少在 5.0 版中。

我在 MSDN 中看到还有:

  • DropCreateDatabaseAlways
  • DropCreateDatabaseIfModelChanges
  • 将数据库迁移到最新版本

但这些听起来都不像我想要的。

是否存在“不理会数据库-它不知道实体框架,老实说,也不关心它” IDatabaseInitializer在某处实现?

有可能制作一个吗?

或者是否有其他一些我可以调整的属性 - 我在任何地方都找不到AutomaticMigrationsEnabled问题答案中提到的属性。

或者,也许有一个关键原因为什么我实际上需要在数据库中拥有这些表?

4

2 回答 2

3

你可以试试

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
    modelBuilder.Conventions.Remove<IncludeMetadataConvention>();
}

或者

Database.SetInitializer<MyContext>(null);
于 2013-08-26T09:05:28.850 回答
1

我认为在这种情况下,逆向工程师代码优先是要走的路。

您将需要Entity Framework Power Tools Beta 3 在此处进一步解释:Code First to an Existing Database

据我所知,这不会实现迁移或其他任何情况。

于 2013-08-06T08:13:06.243 回答