c# - NHibernate:相同的类型,不同的 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 通过向父类设置的子类添加一个鉴别器值,然后使用 .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() 方法允许使用字符串插值和替换,以防您想在我的简单示例中避免使用魔术字符串。
推荐阅读
- python - 用 Matplotlib 不代表半个像素
- assembly - 针对 collatz 猜想优化 x86 汇编子程序运行时的方法
- scala - 如何使用 spark 和 scala 的并行查询从 onComplete Success 案例中返回值以构建 DataFrame?
- java - 如何使用 camera2 和 mediacodec api 录制和保存视频?
- c++ - 无符号整数会升级为有符号吗?表达式的类型是什么 (uint16_t)-1 * (uint16_t)-1
- upgrade - 如何使用 ceph-deploy 执行小升级?
- c++ - 为 C++ 对的映射实现 map.find() 时出错
- python - 错误 pip 不适用于具有不同 python 版本的代理
- javascript - 为什么不更新我在子组件中传递的父组件中的值并更新使用自定义事件 $emit Vue 3?
- php - 用 fopen 创建的 PHP 文件消失了