2009-05-06 160 views
1

將實體框架中生成的對象用作業務對象是不好的做法嗎?圍繞實體框架對象編寫一個二次包裝,然後再通過層之間的更好?.NET實體框架

例如,寫我自己的POCO Person,它接受我生成的實體框架對象EFPerson中的一個來初始化POCO Person對象?

+0

如果EF對象有序列化問題,是不是最好把它們包裝在POCO中?因爲你可能在將來某個時候想通過WCF公開你的商業邏輯。 – Nate 2009-05-06 16:08:34

回答

2

我不明白爲什麼會這樣不好的做法。根據您打算如何使用EF對象,這可能會很尷尬。

我有部分類在EF對象中實現BIZ邏輯,使用接口提供抽象級別。

例如。

public partial class Client : IClient 
{ 
    void DoSomething(); 
} 

// then an EF generated object ... 
public partial class Client 
{ 
// ... 
} 

我唯一的問題是序列化對象。在我的情況下,使用WCF序列化成JSON。沒有創建一箇中間DTO作爲一個離散的類/對象或匿名類型是不可能的。

如果你有興趣系列化,看看這裏我的另一個問題:Serialize Entity Framework objects into JSON

+0

如果DTO是必要的,那麼簡單地將DTO用於一切,然後在DTO上使用一些靜態方法來轉換EF對象並從EF對象轉換它並不明智嗎? – Nate 2009-05-06 16:12:37

+0

我選擇不這樣做。 1 /太多的努力和代碼維護(即使使用代碼生成工具)和2 /當我使用DTO時,我將它們用於不同的目的,主要用於WCF工作。簡單勝,對我來說! – 2009-05-06 17:13:48

+0

除了JavaScript之外,您的DTO可以使用其他「客戶端」嗎? 我的主要用途是通過WCF,我不知道客戶。 – Nate 2009-05-07 03:34:15

4

雖然有些人往往在實體框架類包裝到他們的業務對象,我通常會建議不要那樣做。

我知道這改善了業務邏輯和數據訪問的分離,但我認爲這通常不值得重複所有實體類型的開銷。

OR映射器的目的是什麼?無需手動將對象映射到數據庫的複雜數據訪問層就能堅持業務對象。如果你包裝了實體框架類,你只能使用獲得的一半便利。

最後,數據訪問和業務邏輯之間的耦合與部分類不緊密。不久之前,我在幾個小時內將一個涉及大約30個實體的項目從實體框架改爲LINQ to SQL,沒有出現任何重大問題。

+0

那些市長......總是造成問題...... – 2009-05-06 16:07:29

+0

:D去修復...;) – 2009-05-07 10:09:37