NHibernate - Отображение абстрактного неизменяемого объекта значения
У меня есть следующая модель предметной области, которую мне нужно сохранить в базе данных с помощью 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 не имеют идентификатора, и они являются неизменяемыми.
Проблема в том, что я понятия не имею, как написать карту для свойства AnyValueObject. Я знаю, что объекты-значения должны отображаться как Компоненты, но как обращаться с абстрактными объектами-значениями?
1 ответ
Вы должны либо дать ему идентификатор, либо избежать полиморфизма, потому что NH не поддерживает полиморфизм для компонентов и требует идентификатор для сущностей.
Если это довольно простое наследование с несколькими различными классами и без логики, я бы поместил все это в один класс. В любом случае это намного проще. Тогда вы можете отобразить его как компонент. Вы могли бы дать ему перечисление, чтобы легко проверить тип, который он имеет.
Если вам действительно (действительно) нужно наследование / полиморфизм, вам нужно дать ему идентификатор.