我正在使用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<>的类。尚不清楚夏普建筑如何实现这种常见条件。这是否必须通过大量的覆盖来处理?
答案 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
在那里,您还可以找到有关如何映射复合元素集合的信息。