我看到了这个示例here,这是建议在DDD中制作vaueobject的方法,看看这个
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 kinda imutable class ???
我的映射calss是这样的:
public class SubCategoryMapping : EntityTypeConfiguration<SubCategory>
{
public SubCategoryMapping()
{
ToTable("SubCategory");
// Id ????
Property(sc => sc.Name);
Property(sc => sc.NumberOfPosts);
}
}
答案 0 :(得分:0)
您无法将SubCategory映射到没有主键的表。我猜你可以定义一些列的组合作为主键,但我认为这与价值对象概念相矛盾。
您可以在SubCategory上使用[complextype]
属性。您仍然可以使用私有setter使它们不可变。但是,它不会将子类别映射到表。
public class Category{
public SubCategory SubCategory{get;set;}
}
[ComplexType]
public class SubCategory :ValueObjectBase
{
//Constructor
public string Name {get; private set;}
....
}
使用此配置,SubCategory将位于类别表中。