C# Fluent nHibernate Id是一个参考
我遇到了两个表共享同一个键的情况,让我们说ID。当我用FluentMapping映射这两个表时,我如何为我希望ID实际映射到对象的类进行映射C# Fluent nHibernate Id是一个参考,c#,.net,nhibernate,fluent-nhibernate,C#,.net,Nhibernate,Fluent Nhibernate,我遇到了两个表共享同一个键的情况,让我们说ID。当我用FluentMapping映射这两个表时,我如何为我希望ID实际映射到对象的类进行映射 public class First { public virtual int Id {get; set;} public virtual string Name {get; set; } } public class Second { public virtual First First {get; set;} pub
public class First
{
public virtual int Id {get; set;}
public virtual string Name {get; set; }
}
public class Second
{
public virtual First First {get; set;}
public virtual int Number {get; set; }
}
如何绘制第二类地图?第二个表也有一个ID,但它是第一个表ID的外键。就像Sjonny说的,这听起来像是继承,它会
class First
{
public virtual int Id { get; set; }
public virtual string Name { get; set; }
}
class Second : First
{
public virtual int Number { get; set; }
}
class FirstMap : ClassMap<First>
{
public FirstMap()
{
Id(f => f.Id).GeneratedBy.HiLo("100");
Map(f => f.Name);
}
}
class SecondMap : SubclassMap<Second>
{
public SecondMap()
{
KeyColumn("Id");
Map(s => s.Number);
}
}
第一类
{
公共虚拟整数Id{get;set;}
公共虚拟字符串名称{get;set;}
}
第二班:第一班
{
公共虚拟整数{get;set;}
}
类FirstMap:ClassMap
{
公共FirstMap()
{
Id(f=>f.Id).GeneratedBy.HiLo(“100”);
Map(f=>f.Name);
}
}
类SecondMap:子类map
{
公共地图()
{
键列(“Id”);
地图(s=>s.Number);
}
}
但是您的场景也是可能的,但是您需要额外的工作,并且在以后的代码中不是很好
class SecondMap : ClassMap<Second>
{
public SecondMap()
{
CompositeId()
.KeyReference(f => f.First, "Id");
Map(s => s.Number);
}
}
class Second
{
public virtual First First {get; set;}
public virtual int Number { get; set; }
// required for Compositekeys
public override bool Equals(object obj)
{
var other = obj as Second;
return (other != null) && (First.Id == other.First.Id) ;
}
// required for Compositekeys
public override int GetHashCode()
{
return First.Id.GetHashCode();
}
}
classsecondmap:ClassMap
{
公共地图()
{
复合ID()
.KeyReference(f=>f.First,“Id”);
地图(s=>s.Number);
}
}
二等
{
公共虚拟第一{get;set;}
公共虚拟整数{get;set;}
//合成键需要
公共覆盖布尔等于(对象对象对象)
{
var other=第二个obj;
返回(other!=null)&&(First.Id==other.First.Id);
}
//合成键需要
公共覆盖int GetHashCode()
{
首先返回.Id.GetHashCode();
}
}
就像Sjonny说的,这听起来真的像是继承,它会
class First
{
public virtual int Id { get; set; }
public virtual string Name { get; set; }
}
class Second : First
{
public virtual int Number { get; set; }
}
class FirstMap : ClassMap<First>
{
public FirstMap()
{
Id(f => f.Id).GeneratedBy.HiLo("100");
Map(f => f.Name);
}
}
class SecondMap : SubclassMap<Second>
{
public SecondMap()
{
KeyColumn("Id");
Map(s => s.Number);
}
}
第一类
{
公共虚拟整数Id{get;set;}
公共虚拟字符串名称{get;set;}
}
第二班:第一班
{
公共虚拟整数{get;set;}
}
类FirstMap:ClassMap
{
公共FirstMap()
{
Id(f=>f.Id).GeneratedBy.HiLo(“100”);
Map(f=>f.Name);
}
}
类SecondMap:子类map
{
公共地图()
{
键列(“Id”);
地图(s=>s.Number);
}
}
但是您的场景也是可能的,但是您需要额外的工作,并且在以后的代码中不是很好
class SecondMap : ClassMap<Second>
{
public SecondMap()
{
CompositeId()
.KeyReference(f => f.First, "Id");
Map(s => s.Number);
}
}
class Second
{
public virtual First First {get; set;}
public virtual int Number { get; set; }
// required for Compositekeys
public override bool Equals(object obj)
{
var other = obj as Second;
return (other != null) && (First.Id == other.First.Id) ;
}
// required for Compositekeys
public override int GetHashCode()
{
return First.Id.GetHashCode();
}
}
classsecondmap:ClassMap
{
公共地图()
{
复合ID()
.KeyReference(f=>f.First,“Id”);
地图(s=>s.Number);
}
}
二等
{
公共虚拟第一{get;set;}
公共虚拟整数{get;set;}
//合成键需要
公共覆盖布尔等于(对象对象对象)
{
var other=第二个obj;
返回(other!=null)&&(First.Id==other.First.Id);
}
//合成键需要
公共覆盖int GetHashCode()
{
首先返回.Id.GetHashCode();
}
}
在这种情况下,你会说第二个是一种第一个?意思-就像员工
是一种人
,或者经理
是一种员工
。如果是这样的话,你会想使用继承。在这种情况下,你会说第二个Second
是第一个First
的一种吗?意思-就像员工
是一种人
,或者经理
是一种员工
。如果是这样的话,您将希望使用继承。