2011-03-21 15 views
7

我試圖做一些實體框架代碼優先編程到現有數據庫..但我總是看到這個代碼在我的SQL事件探查器: -爲什麼實體框架代碼優先(與現有的DB)保持從EdmMetadata表試圖獲取數據?

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

的到底是什麼EdmMetadata表,爲什麼是我的EF代碼試圖從那裏獲取Id和ModelHash?

記住,我試圖對現有的DB工作。

歡呼聲:)

+0

我看到這個表顯示在我的動態數據網站,下面建議的方法刪除它。 – 2012-07-02 15:25:36

回答

10

對現有數據庫沒有Code-First。如果你有數據庫,你是在做數據庫優先。在這種情況下,你的映射是由數據庫驅動的。

EdmMetadata表保存當前代碼優先模型的散列,並且它允許DbContext檢測模型的變化,使數據庫可以被重新創建。該功能默認打開。您可以通過刪除約定在OnModelCreating關閉它:

modelBuilder.Conventions.Remove<IncludeMetadataConvention>(); 
+9

「對現有數據庫沒有Code-First」。呃..你確定嗎? EF英孚團隊,否則表示:「*本演練是要證明代碼首先生成數據庫模式,但同樣的原理適用於映射到現有的數據庫,以「7 *例外」 http://blogs.msdn.com /b/adonet/archive/2011/03/15/ef-4-1-code-first-walkthrough.aspx – 2011-03-21 23:51:51

+1

我並不是說流利的映射不與現有的數據庫工作。它確實,但它不是代碼第一。代碼首先意味着您首先創建pocos和映射,並從這些信息生成數據庫。 – 2011-03-22 06:22:16

+2

這對我來說是一種洗滌...你在第一個陳述(-1)中過於語義化。但是你的第二份聲明是在(+1) – 2011-12-02 16:04:27