3

我正在使用 Sharp Architecture,并且在许多情况下,值对象都在实体中使用。这是一个明显的简单示例:

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; }
}

这当然会抛出:

来自表 Person 的关联引用了一个未映射的类:Project.Domain.StreetAddress
因为 AutoPersistenceModelGenerator 只包含类型为 IEntityWithTypedId<> 的类。目前尚不清楚 Sharp Architecture 期望如何实现这种常见条件。这是否必须通过无数次覆盖来处理?

4

3 回答 3

4

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

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

我将尝试获取我看到的涵盖此帖子的博客文章以获得信用。

于 2010-06-22T20:12:18.323 回答
3

您可能希望将其映射为一个组件。您可以使用 Fluent NHibernate 中的映射覆盖来完成此操作。

于 2010-06-22T16:40:43.427 回答
1

我同意亚历克。我会将其映射为一个组件。

有关这方面的更多信息,请参阅这个 SO 问题:

在 Fluent Nhibernate 中自动映射复合元素

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

于 2010-08-31T00:44:05.147 回答