Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/39.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 请帮我把这个简单流畅的nhibernate映射带到生活中_C#_Hibernate_Fluent Nhibernate_Nhibernate Mapping_One To One - Fatal编程技术网

C# 请帮我把这个简单流畅的nhibernate映射带到生活中

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,它们可以容纳对第三个表的单个引用:

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的用法: