值对象通过实体框架持久化

时间:2013-03-12 22:16:59

标签: entity-framework

我看到了这个示例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);
    }
}

1 个答案:

答案 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将位于类别表中。