我有以下域模型,我需要在Fluent NHibernate的帮助下保存在数据库中:
public class Entity
{
public Guid Id { get; set; }
public IValueObject AnyValueObject { get; set; }
}
public interface IValueObject
{
string Value { get; }
}
public class ValueObject : IValueObject
{
private readonly string _value;
public ValueObject(string value)
{
_value = value; // null checks omitted for brevity
}
public string Value { get { return _value; }}
}
public class AnotherValueObject : IValueObject
{
private readonly string _value;
private readonly string _anotherValue;
public AnotherValueObject(string value, string anotherValue)
{
_value = value; // null checks omitted for brevity
_anotherValue = anotherValue;
}
public string Value { get { return _value; } }
public string AnotherValue { get { return _anotherValue; } }
}
ValueObject和AnotherValueObject没有任何ID,并且它们是不可变的。
问题是我不知道如何为AnyValueObject属性编写地图。我知道值对象必须映射为组件,但如何处理抽象的不可变值对象?
答案 0 :(得分:2)
您必须给它一个ID或避免多态,因为NH不支持组件的多态性,并且需要实体的ID。
如果它是一个相当简单的继承,只有几个不同的类而没有逻辑,我会把它全部放在同一个类中。反正它简单得多。然后你可以将它映射为一个组件。你可以给它一个枚举,轻松检查它的类型。
如果你真的(真的)需要继承/多态,你需要给它一个ID。