我正在學習實體框架和POCO,雖然我喜歡很多概念,但我認爲我並沒有完全理解它。這裏有一個例子:實體框架和POCO
我有類似下面的模式:
create table Customer
{
Id int,
Name varchar(32),
Value1 varchar(32),
Value2 varchar(32),
Value3 varchar(32)
...
Value50 varchar(32)
}
-- ColumnName will map to "Value1", "Value2", etc
create table ColumnMapping
{
ColumnName varchar(32),
DisplayName varchar(32)
}
表示這個數據看起來像對象:
class Customer
{
public Id { get; set; }
public Name { get; set;}
public Dictionary<string, string> CustomData { get; set; }
}
也就是說,我想映射值1將Value50設置爲Dictionary(字典的關鍵字由ColumnMapping表確定)。
我想知道這是什麼最好的方法。
我希望客戶成爲POCO,但爲了做到這一點,它需要了解Value1..Value50,以便它能夠將這些列轉換爲字典。但考慮到POCO應該持續無知,我在質疑這是否是正確的方法。我想,一般來說,我正在爲POCO的真正目標而努力 - 它是業務層使用的對象,還是需要在POCO和「業務對象」之間進行映射,以及「業務對象」是業務層應該使用的。
任何有關如何處理這種情況的建議將不勝感激。
編輯
,因爲我沒有得到一個答案,我想請問一下,我會繼續前進,並指示我決定的問題(如果任何人有這種類似的問題)。雖然POCO持續不知情,因爲它不需要知道它如何持續下去,但它並不完全是無知的。也就是說,它必須以某種方式與持久層綁定。
在我的示例中,儘管我不希望業務層瞭解Value1,Value2,Value3等,但有人需要知道它以便將這些值轉換爲字典。我認爲把這個邏輯放在正確的地方是POCO,因此我認爲POCO應該具有Value1,Value2,Value3等列的屬性。
感謝, 埃裏克
感謝雷。我認爲你建議我應該使用不同的模式。雖然你對某些應用程序可能會更好,但我們假設對於這個問題我需要具有上述模式。通過我提到的模式,我想知道POCO對象應該是什麼樣子,以及在業務層中是否有不同的(但相似的)對象。 – Eric 2012-02-17 06:27:06