使用fluent-nhibernate可以在实体内自动化一个Value Object吗?

时间:2010-06-19 02:30:03

标签: fluent-nhibernate s#arp-architecture automapping

我正在使用Sharp Architecture,并且在一些实体中使用了Value Objects。这是一个明显的简单例子:

public class Person : Entity
{
    protected Person(){}

    public Person(string personName)
    {
        this.PersonName = personName;
    }

    public virtual string PersonName { get; protected set;}
    public virtual StreetAddress MailingAddress { get; set; }
}

public class StreetAddress : ValueObject
{
    protected StreetAddress(){}

    public StreetAddress(string address1, string address2, string city, string state, string postalCode, string country )
    {
        this.Address1 = address1;
        this.Address2 = address2;
        this.City = city;
        this.State = state;
        this.PostalCode = postalCode;
        this.Country = country;
    }

    public virtual string Address1 { get; protected set; }
    public virtual string Address2 { get; protected set; }
    public virtual string City { get; protected set; }
    public virtual string State { get; protected set; }
    public virtual string PostalCode { get; protected set; }
    public virtual string Country { get; protected set; }
}

这当然会引发:

An association from the table Person refers to an unmapped class: Project.Domain.StreetAddress
因为AutoPersistenceModelGenerator仅包含类型为IEntityWithTypedId<>的类。尚不清楚夏普建筑如何实现这种常见条件。这是否必须通过大量的覆盖来处理?

3 个答案:

答案 0 :(得分:4)

您可以将AutoPersistenceModelGenerator中的GetSetup()方法更改为:

private Action<AutoMappingExpressions> GetSetup()
    {
        return c =>
                   {
                       c.IsComponentType = type => type.BaseType == typeof (ValueObject);
                   };
    }

我会尝试获取我发布的博文章,其中包含此信息。

答案 1 :(得分:3)

您可能希望将其映射为组件。您可以使用Fluent NHibernate中的映射覆盖来实现此目的。

答案 2 :(得分:1)

我同意亚历克。我会把它作为一个组件来映射。

有关详细信息,请参阅此SO问题:

AutoMapping a Composite Element in Fluent Nhibernate

在那里,您还可以找到有关如何映射复合元素集合的信息。