C# 用NHibernate映射?
我的域模型中有以下类:C# 用NHibernate映射?,c#,nhibernate,orm,mapping,C#,Nhibernate,Orm,Mapping,我的域模型中有以下类: public class Player { public virtual string ID { get; set; } public virtual string Name { get; set; } public virtual List<Match> Matches { get; set; } } public class Match { public virtual int ID { get; set; } pu
public class Player
{
public virtual string ID { get; set; }
public virtual string Name { get; set; }
public virtual List<Match> Matches { get; set; }
}
public class Match
{
public virtual int ID { get; set; }
public virtual Player Player1 { get; set; }
public virtual Player Player2 { get; set; }
}
公共类播放器
{
公共虚拟字符串ID{get;set;}
公共虚拟字符串名称{get;set;}
公共虚拟列表匹配{get;set;}
}
公开课比赛
{
公共虚拟整数ID{get;set;}
公共虚拟播放器播放器1{get;set;}
公共虚拟播放器播放器2{get;set;}
}
正如你所见,一名球员可以打多场比赛,每场比赛都有两名球员。
如何使用Fluent mapping正确映射这些类?比赛映射上的玩家将是引用比赛表中不同玩家ID的引用(多对一),而玩家上的比赛将是多对多:
公共密封类PlayerMap:ClassMap
{
公共播放器映射()
{
Id(x=>x.Id).GeneratedBy.Native();
Map(x=>x.Name);
HasMany(x=>x.Matches);
}
}
公共密封类匹配映射:类映射
{
公共匹配图()
{
Id(x=>x.Id).GeneratedBy.Native();
引用(x=>x.Player1,“Player1_id”).NotFound.Ignore().Cascade.None();
引用(x=>x.Player2,“Player2_id”).NotFound.Ignore().Cascade.None();
}
}
您需要多对多(本例为多对2)。可能的fluent映射是
public PlayerMap()
{
[...]
HasManyToMany(x => x.Matches).Cascade.AllDeleteOrphan();
}
否则nhibernate将不知道使用哪个列(match.player1\u id或match.player2\u id)
public PlayerMap()
{
[...]
HasManyToMany(x => x.Matches).Cascade.AllDeleteOrphan();
}