C# 请帮我把这个简单流畅的nhibernate映射带到生活中
这一切看起来都很简单,但我却找不到问题的答案 假设我有两个表TableA和TableB,它们可以容纳对第三个表的单个引用:C# 请帮我把这个简单流畅的nhibernate映射带到生活中,c#,hibernate,fluent-nhibernate,nhibernate-mapping,one-to-one,C#,Hibernate,Fluent Nhibernate,Nhibernate Mapping,One To One,这一切看起来都很简单,但我却找不到问题的答案 假设我有两个表TableA和TableB,它们可以容纳对第三个表的单个引用: TableA TableB TableC ID ID ID TableC_ID TableC_ID RandomDataC RandomDataA RandomDataB 每一类都由以下类别表示: public Class ClassA{ public virtual int Id{g
TableA TableB TableC
ID ID ID
TableC_ID TableC_ID RandomDataC
RandomDataA RandomDataB
每一类都由以下类别表示:
public Class ClassA{
public virtual int Id{get;set;}
public virtual ClassC ObjAC{get;set;}
...
}
public Class ClassB{
public virtual int Id{get;set;}
public virtual ClassC ObjBC{get;set;}
...
}
public Class ClassC{
public virtual int Id{get;set;}
...
}
正如您所看到的,ClassA和ClassB拥有一个名为ClassC的属性
我尝试了以下映射(以及其他映射…)
公共类类映射:类映射{
公共类映射(){
Id(x=>x.Id);
HasOne(x=>x.ObjAC).Cascade.All();
...
}
}
公共类ClassBMap:ClassMap{
公共类bmap(){
Id(x=>x.Id);
HasOne(x=>x.ObjBC).Cascade.All();
...
}
}
公共类ClassCMap:ClassMap{
公共类cmap(){
Id(x=>x.Id);
}
}
但是映射是不正确的。我尝试过ClassCMap进行参考,但没有成功
请帮助…尝试以下操作:
public Class ClassAMap : ClassMap<ClassA>{
public ClassAMap(){
Id(x => x.Id);
References(x => x.ObjAC, "TableC_ID").Cascade.All();
...
}
}
public Class ClassBMap : ClassMap<ClassB>{
public ClassBMap(){
Id(x => x.Id);
References(x => x.ObjBC, "TableC_ID").Cascade.All();
...
}
}
public Class ClassCMap : ClassMap<ClassC>{
public ClassCMap(){
Id(x => x.Id);
}
}
公共类类映射:类映射{
公共类映射(){
Id(x=>x.Id);
引用(x=>x.ObjAC,“TableC_ID”).Cascade.All();
...
}
}
公共类ClassBMap:ClassMap{
公共类bmap(){
Id(x=>x.Id);
引用(x=>x.ObjBC,“TableC_ID”).Cascade.All();
...
}
}
公共类ClassCMap:ClassMap{
公共类cmap(){
Id(x=>x.Id);
}
}
您可能还希望确保推断出正确的表名。问题是HasOne根据要映射的表的主键映射到实体。尝试以下操作:
public Class ClassAMap : ClassMap<ClassA>{
public ClassAMap(){
Id(x => x.Id);
References(x => x.ObjAC, "TableC_ID").Cascade.All();
...
}
}
public Class ClassBMap : ClassMap<ClassB>{
public ClassBMap(){
Id(x => x.Id);
References(x => x.ObjBC, "TableC_ID").Cascade.All();
...
}
}
public Class ClassCMap : ClassMap<ClassC>{
public ClassCMap(){
Id(x => x.Id);
}
}
公共类类映射:类映射{
公共类映射(){
Id(x=>x.Id);
引用(x=>x.ObjAC,“TableC_ID”).Cascade.All();
...
}
}
公共类ClassBMap:ClassMap{
公共类bmap(){
Id(x=>x.Id);
引用(x=>x.ObjBC,“TableC_ID”).Cascade.All();
...
}
}
公共类ClassCMap:ClassMap{
公共类cmap(){
Id(x=>x.Id);
}
}
您可能还希望确保推断出正确的表名。问题是HasOne根据您映射的表的主键映射到实体。使用HasOne时,这意味着您的表与另一个表共享相同的主键。在你的情况下,这不是真的。类A、B和C都有自己的ID。请参阅以下文章,其中对这一点进行了更详细的解释:
使用HasOne时,这意味着您的表与另一个表共享相同的主键。在你的情况下,这不是真的。类A、B和C都有自己的ID。请参阅以下文章,其中对这一点进行了更详细的解释:
您可能需要使用
引用
而不是HasOne
。HasOne有一个独特的用例。
将HasOne
替换为References
。我不相信。Cascade.All()也是必需的
您可以在此处查看HasOne的用法:。您可能需要使用
参考
而不是HasOne
。HasOne有一个独特的用例。
将HasOne
替换为References
。我不相信。Cascade.All()也是必需的
您可以在此处查看HasOne的用法: