2013-03-12 101 views
0

我看到這個樣本here堅持,這裏是這個建議的方式讓vaueobject在DDD,看看這個值對象通過實體框架

public class SubCategory : ValueObjectBase 
{ 
    public string Name { get; private set; } 
    public int NumberOfPosts { get; private set; } 

    public SubCategory() 
    { 
    } 

    public SubCategory(string name, int numberOfPost) 
    { 
     Name = name; 
     NumberOfPosts = numberOfPost; 
    } 
} 

在我的代碼,我使用ValueObjectBase,唐」讓我有任何Id,Entity框架映射中的每個表都應該有一個Id在數據庫中創建一個表,如何映射這個valueObject ann有點不可類?

我映射CALSS是這樣的:

public class SubCategoryMapping : EntityTypeConfiguration<SubCategory> 
{ 
    public SubCategoryMapping() 
    { 
     ToTable("SubCategory"); 
     // Id ???? 
     Property(sc => sc.Name); 
     Property(sc => sc.NumberOfPosts); 
    } 
} 
+0

製作一個值對象聚合根根本沒有任何意義。如果你想要一個專用的桌子,你應該給它一個ID。沒有解決方法。 – boran 2013-03-13 10:15:11

+0

哦真的很抱歉,我沒有注意到,你是對的,現在在這種情況下,SubCategory實際上是一個與Category有關的事情,我現在想讓它不可變,我該如何堅持下去? – 2013-03-13 11:01:16

回答

0

你不能沒有主鍵映射子類別的表。我想你可以定義一些列組合作爲主鍵,但我認爲這與價值對象概念相矛盾。

您可以在您的子類別上使用[complextype]屬性。你仍然可以使用專用setter來使它們不可變。但是,它不會將子類別映射到表格。

public class Category{ 
    public SubCategory SubCategory{get;set;} 
} 

[ComplexType] 
public class SubCategory :ValueObjectBase 
{ 
    //Constructor 
    public string Name {get; private set;} 
    .... 
} 

使用此配置子類別將在類別表中。