У меня есть отношение 1-ко-многим между объектами RestorableEnvironment
и IBaselineEntity
: у данного RestorableEnvironment
будет один и только один объект IBaselineEntity
, но каждый объект IBaselineEntity
может быть привязан к 0-n RestorableEnvironment
объектов.Однако IBaselineEntity
реализуется одним из двух способов: через файл или через базу данных.Мои классы (в общем) похожи на:
public interface IBaselineEntity
{
BaselineImage BuildImage();
//Remainder of interface
}
public class BaselineFile : IBaseline
{
//implementation
}
public class BaselineDatabase : IBaseline
{
//implementation
}
public class RestorableEnvironment
{
public IBaselineEntity BaselineEntity { get; set; }
//Remainder of class
}
NHibernate нуждается в конкретной реализации IBaselineEntity
в операторе ссылок.Чтобы справиться с этим, я обновил RestorableEnvironment
до:
public class RestorableEnvironment
{
public IBaselineEntity BaselineEntity
{
get { return BaselineDatabase ?? BaselineFile; }
set
{
BaselineFile = value as BaselineFile;
BaselineDatabase = value as BaselineDatabase;
}
}
private BaselineFile _baselineFile;
public BaselineFile BaselineFile
{
get { return _baselineFile; }
protected set
{
_baselineFile = value;
if (value != null)
BaselineDatabase = null;
}
}
private BaselineDatabase _baselineDatabase;
public BaselineDatabase BaselineDatabase
{
get { return _baselineDatabase; }
protected set
{
_baselineDatabase= value;
if (value != null)
BaselineFile = null;
}
}
// Remainder of class
}
Теперь, когда у меня есть конкретные классы, я теперь могу отображать в NHibernate, но это похоже на хак.Есть предложения по улучшению?