2010-04-06 235 views
5

通過在實體框架4.0中使用T4模板創建POCO會有什麼問題?爲什麼使用實體框架4.0 而不是創建POCO時的默認行爲?實體框架POCO

回答

3

你失去了很多東西。一個「純粹的」POCO在ORM中使用有限,因爲它不會執行更改跟蹤。換句話說,當您改變對象並將更改保存到上下文時,您希望將更改的屬性保存到數據庫中。使用「純粹」POCO,您可以通過基於快照的變更追蹤來實現這一點,但效率相當低。您也可以使用運行時代理來執行此操作,這會強制您使軌道屬性public virtual,因此您可以證明不再有「POCO」。而且,使用代理意味着您不知道實例的真實運行時類型。

您還會失去一些便利性,如EntityState

「Pure」POCOs無法進行延遲加載。再一次,你可以用代理類型來解決這個問題,但是,如果你使用代理,你實際上並沒有一個「純粹的」POCO。

除此之外,在實體框架中使用POCO實體的需求少於其他一些ORM中的需求。這是因爲您始終可以使用LINQ將您的實體類型投影到POCO實例上,而無需首先實體化實體實例。因此,即使您沒有以這種方式映射您的實體,實體框架應用程序中也始終提供「純粹」的POCO。

+0

您可以對使用非POCO的單元測試發表評論嗎? – rkrauter 2010-04-06 20:28:06

+1

使用非POCOs的單元測試正常工作。對我來說毫無問題。 – 2010-04-06 20:38:40

+0

感謝您的迴應! – rkrauter 2010-04-06 20:49:26