NHibernate:将引用持久化到具有多个冲突类的接口
我在NHibernate:将引用持久化到具有多个冲突类的接口,nhibernate,Nhibernate,我在RestorableEnvironment和IBaselineEntity对象之间有一对多的关系:给定的RestorableEnvironment将有一个且只有一个IBaselineEntity对象,但每个IBaselineEntity对象可能绑定到0-nRestorableEnvironment对象。但是,IBaselineEntity通过两种方式之一实现:通过文件或数据库。我的课程(通常)如下: NHibernate需要在references语句中具体实现IBaselineEntity。
RestorableEnvironment
和IBaselineEntity
对象之间有一对多的关系:给定的RestorableEnvironment
将有一个且只有一个IBaselineEntity
对象,但每个IBaselineEntity
对象可能绑定到0-nRestorableEnvironment
对象。但是,IBaselineEntity
通过两种方式之一实现:通过文件或数据库。我的课程(通常)如下:
NHibernate需要在references语句中具体实现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中映射,但这感觉像是一个黑客。是否有任何改进建议?将其映射为任何参考 使用fluentmapping
// ClassMap<RestorableEnvironment>
RestorableEnvironmentMap()
{
ReferenceAny(e => e.BaselineEntity)
.EntityIdentifierColumn("entirtyid")
.EntityTypeColumn("entitytype")
.IdentityType<int>()
.MetaType<string>()
.AddMetaValue<E1>("e1")
.AddMetaValue<E2>("e2");
}
//类映射
RestorableEnvironmentMap()
{
ReferenceAny(e=>e.BaselineEntity)
.EntityIdentifierColumn(“EntityID”)
.EntityTypeColumn(“entitytype”)
.IdentityType()
.MetaType()
.AddMetaValue(“e1”)
.AddMetaValue(“e2”);
}
完美!有关元映射的更多信息,我还看到:
// ClassMap<RestorableEnvironment>
RestorableEnvironmentMap()
{
ReferenceAny(e => e.BaselineEntity)
.EntityIdentifierColumn("entirtyid")
.EntityTypeColumn("entitytype")
.IdentityType<int>()
.MetaType<string>()
.AddMetaValue<E1>("e1")
.AddMetaValue<E2>("e2");
}