为什么实体框架代码优先(使用现有数据库)继续尝试从EdmMetadata表获取数据?

Pur*_*ome 7 .net c# entity-framework entity-framework-4.1

我正在尝试对现有数据库执行一些实体框架代码优先编程..但我一直在我的Sql Profiler中看到这段代码: -

SELECT   TOP ( 1 ) [Extent1].[Id]        AS [Id],
                   [Extent1].[ModelHash] AS [ModelHash]
FROM     [dbo].[EdmMetadata] AS [Extent1]
ORDER BY [Extent1].[Id] DESC
Run Code Online (Sandbox Code Playgroud)

这个EdmMetadata表到底是什么?为什么我的EF代码试图从那里获取Id和ModelHash?

请记住,我正在尝试对抗现有数据库.

干杯:)

Lad*_*nka 10

针对现有数据库没有Code-First.如果你有数据库,那么你首先要做数据库.在这种情况下,您的映射由数据库驱动.

EdmMetadata表保留当前代码优先模型的哈希值,它允许DbContext检测模型的更改,以便可以重新创建数据库.默认情况下,此功能处于启用状态.您可以通过删除约定来关闭它OnModelCreating:

modelBuilder.Conventions.Remove<IncludeMetadataConvention>();
Run Code Online (Sandbox Code Playgroud)

  • "对现有数据库没有Code-First".呃..你确定吗?EF小组另有说法:"*本演练将演示Code First生成数据库模式,但相同的主体适用于映射到现有数据库,但"7.*"除外http://blogs.msdn.com /b/adonet/archive/2011/03/15/ef-4-1-code-first-walkthrough.aspx (9认同)
  • 对我来说这是一个洗漱......你在第一个陈述中过于语义化(-1).但你的第二个声明是现场(+1) (2认同)
  • 嗯,这一切都有意义,我在OnModelCreating方法中添加了这一行,但在LINQPad中,我仍然看到正在查询EdmMetadata表... (2认同)