NHibernate:相同的类型,不同的 ClassMaps?
NHibernate: Same type, different ClassMaps?
我有一个用例,在不同的一对多关系中使用相同的类型,关系多端的数据必须根据用途存储到不同的表中。有没有一种方法可以告诉(流利的)NHibernate 使用哪个 ClassMap(例如像下面我的假 UseClassMap
方法)?
粗略示例代码:
public class Foo
{
public long Id {get; set;}
public IEnumerable<Bar> TheoreticalBar {get; set;}
public IEnumerable<Bar> ActualBar {get; set; }
}
public class FooMap : ClassMap<Foo>
{
Table("Foo");
Id(x => x.Id);
HasMany(x => x.TheoreticalBar).UseClassMap(TheoryBarMap);
HasMany(x => x.ActualBar).UseClassMap(ActualBarMap);
}
public class TheoreticalBarMap : ClassMap<Bar>
{
TableNames("TheoreticalBar");
...
}
public class ActualBarMap : ClassMap<Bar>
{
TableNames("ActualBar");
...
}
希望获得更多任意和无法解释的否决票,我将回答这个问题:我无法找到明确声明要使用的 ClassMap 的特定方法,但我能够找到没有解决方案添加不必要的子类型或类似的 ClassMaps,方法是向父级设置的子级 class 添加鉴别器值,然后使用 .Where() 方法过滤鉴别器值……像这样:
class Bar
{
public string BarType {get; protected set};
public Bar(string barType)
{
BarType = barType;
}
}
public class FooMap : ClassMap<Foo>
{
Table("Foo");
Id(x => x.Id);
HasMany(x => x.TheoreticalBar).Where("BarType = theoretical");
HasMany(x => x.ActualBar).Where("BarType = actual");
}
.Where() 方法允许使用字符串插值和替换,以防您想在我这里的简单示例中避免使用魔法字符串。
我有一个用例,在不同的一对多关系中使用相同的类型,关系多端的数据必须根据用途存储到不同的表中。有没有一种方法可以告诉(流利的)NHibernate 使用哪个 ClassMap(例如像下面我的假 UseClassMap
方法)?
粗略示例代码:
public class Foo
{
public long Id {get; set;}
public IEnumerable<Bar> TheoreticalBar {get; set;}
public IEnumerable<Bar> ActualBar {get; set; }
}
public class FooMap : ClassMap<Foo>
{
Table("Foo");
Id(x => x.Id);
HasMany(x => x.TheoreticalBar).UseClassMap(TheoryBarMap);
HasMany(x => x.ActualBar).UseClassMap(ActualBarMap);
}
public class TheoreticalBarMap : ClassMap<Bar>
{
TableNames("TheoreticalBar");
...
}
public class ActualBarMap : ClassMap<Bar>
{
TableNames("ActualBar");
...
}
希望获得更多任意和无法解释的否决票,我将回答这个问题:我无法找到明确声明要使用的 ClassMap 的特定方法,但我能够找到没有解决方案添加不必要的子类型或类似的 ClassMaps,方法是向父级设置的子级 class 添加鉴别器值,然后使用 .Where() 方法过滤鉴别器值……像这样:
class Bar
{
public string BarType {get; protected set};
public Bar(string barType)
{
BarType = barType;
}
}
public class FooMap : ClassMap<Foo>
{
Table("Foo");
Id(x => x.Id);
HasMany(x => x.TheoreticalBar).Where("BarType = theoretical");
HasMany(x => x.ActualBar).Where("BarType = actual");
}
.Where() 方法允许使用字符串插值和替换,以防您想在我这里的简单示例中避免使用魔法字符串。