2010-08-19 134 views
2

如果將「代碼生成策略」設置爲「無」的實體數據模型(EDMX),EF如何確定將概念模型映射到哪些CLR類型?MS Entity Framework如何從概念模型映射到CLR類型?

我想我讀了一些地方,它只是探討匹配概念模型的類型的程序集,但這是參考EF的CTP版本。這仍然是這樣嗎? 我可以控制這個過程嗎?

特別是,我正在將一個使用Linq2SQL的實際代碼庫轉移到EF 4.0中使用POCO。因此,我有Linq2SQL類以及POCO類,現在它們駐留在同一個程序集中,但位於不同的名稱空間中。我試圖從L2S順利遷移到EF,所以我想讓這兩個框架平行運行一段時間。不過,我得到一個運行時錯誤說

CLR類型EDM類型的映射 曖昧,因爲多個CLR類型 匹配EDM類型「SOMETYPE」。 先前發現的CLR型 'SomeNamespace.SomeType',新發現的 CLR類型 'SomeNamespace.POCO.SomeType'

其中SomeNamespace是L2S實體的命名空間。如果EF只是探測與概念模型匹配的所有類型,則此錯誤是有意義的。我是否可以將EF限制爲僅探測SomeNamespace.POCO命名空間?還是應該將我的POCO對象放在另一個程序集中?或者我應該採取第三種方法?

謝謝。

回答

4

通知從ADO.NET團隊博客此評論:

傑夫·2010年2月25日9:10 AM @Derek

這是故意的。你可以把你的 POCO類放在你想要的任何命名空間 中。實體框架的 約定機制用於檢測 實體上的哪些屬性匹配 模型中實體的屬性不使用命名空間。 重要的是類型名稱(沒有 名稱空間)匹配模型(edmx/csdl文件)中的EntityType名稱 。

需要注意的一個方面是,如果您的 有多個類型,但名稱空間不同,名稱相同 。由於 我們沒有考慮命名空間,所以我們 檢測到我們已經找到多種類型 ,並且我們拋出異常。

傑夫

看到這篇文章: link text