2014-01-16 47 views
1

這個問題繼續從以前的問題,如Does Entity Framework 6 support .NET 4.0?
我的問題是具體如何使用NotMapped數據註釋與EF6和.NET v4.0?實體框架6如何支持.NET 4.0?

我可以找到的大多數文章假設開發人員也已經遷移到.NET v4.5或更高版本,其中數據註釋命名空間已被移動到System.ComponentModel.DataAnnotations.Schema並住在System.ComponentModel.DataAnnotations dll中。

回答

3

實體框架6的.NET 4.0版本包含直接在EntityFramework.dll中定義的NotMappedAttribute。它存在於相同的命名空間中,即System.ComponentModel.DataAnnotations.Schema

不過,您需要確保擁有EF 4.0的.NET 4.0版本。如果您的項目以前是以.NET 4.5爲目標的,並且您當時添加了EF,則您已經擁有.NET 4.5版本的EF。將項目更改爲.NET 4.0不足以解決此問題。您需要從項目中刪除EF並重新添加。

+0

感謝hvd,但它已經是.NET 4.0。我發現別的東西雖然... – MarkHone

+0

@MarkHone嘿,是的,我沒有想到這種可能性,但我想如果您在想要使用'NotMappedAttribute'的項目中根本沒有對EF的引用,這是一個沒有引用.NET 4.0版EF的特殊情況:)很高興你現在能夠正常工作。 – hvd

0

我解決了我自己的問題(通過打開我的眼睛!)。數據實體位於單獨的項目中,該項目不包含對實體框架的引用。在實體項目中安裝相同的EF6 NuGet包可解決此問題。

更新:我與EF6有進一步的問題,所以我回滾到EF5,而是創建了一個新的ViewModel,包括我想添加到原始實體的屬性。這保持了令人滿意的上述解決方案中妥協的問題的分離。它也反映了代碼庫中其他地方採用的方法。

+1

爲什麼你的實體(假設POCO)在一個單獨的項目中?是否爲了消除對特定數據實現的依賴?如果是這樣,通過將EF的引用放入您的poco項目中,可以將您的域與持久性耦合起來。請注意,如果你想重構一個不同於EF的數據提供者,你現在必須在多個項目中處理它。 –

+1

@AaronPalmer:是的,你是絕對正確的 - 我剛剛擊敗了分離實體類的全部目的!我想我已經有了另一個解決方案,可以保持預期的解耦,並且一旦我開心就會更新我的自我回答。 – MarkHone

+1

將EF實體視爲數據實體,而不是域對象。這在嘗試解耦POCO實體時引發了一些有趣的問題。兩種可能的途徑是:(1)讓他們留下數據層並獲得所有EF優點(如那些數據註釋),並且有一些機制可以映射到域對象以獲得業務邏輯和行爲。或者(2)解耦POCO並將它們像域對象本身一樣對待,此時您必須避免使用特定的EF功能。另外,要小心如果你自動化他們,你不覆蓋自定義代碼(使用partials或繼承) –