我有一个引用(模板)文本的类,该文本对每个租户和每个用例都有几个可能的文本
class Class1
{
[...]
public virtual Text TitleName { get; set; }
}
class Text
{
public virtual int TenantId { get; set; }
public virtual string Key { get; set; }
public virtual int Number { get; set; }
public virtual string Value { get; set; }
}
不幸的是,表结构看起来像
Table Class1
...
textnumber int,
Table Text
tenant int,
key varchar (10),
number int,
pkey(tenant, key, number);
因为Class1总是指租户= 0(所有租户)和key =“class1text”
编辑: 我需要.Where()但是References()doenst只有HasMany()
到目前为止:
public void TextMap : ClassMap<Text>
{
public TextMap()
{
Table("restexts");
CompositeId()
.KeyProperty(t => t.TenantId, "tenant")
.KeyProperty(t => t.Key, "name")
.KeyProperty(t => t.Number, "number");
Map(t => t.Value, "content");
}
}
public void Class1Map : ClassMap<Class1>
{
public TextMap()
{
// mapping rest
References(c => c.TitleName)
.Columns("textnumber", ??, ??); // column 2 and 3 missing, because always the same
}
}
任何想法?
答案 0 :(得分:0)
您可以使用FluentNHibernate以这种方式映射您的类,这是一种仅在OneToMany关系中映射一个字段的解决方法。
public Class1()
{
Table("TableName");
Id(x => x.MyId).Column("TableId");
.
.
.
HasMany<TextModel>(x => x.textnumber).KeyColumn("TableField");
}
public Text()
{
Table("TableName");
Id(x => x.MyId).Column("TableId");
.
.
.
References<Class1Model>(x => x.number,"TableColumn");
}
然后你可以在你的查询中添加其他字段的过滤器(tenent = 0和key =“class1text”)
我希望它有用
答案 1 :(得分:0)
耗尽时间我将其映射为Map(c => c.TitleNameId, "textnumber");
并且每次我需要titlename时都必须记住租户和密钥名称(使用魔法值:(