我有以下课程:
public class Track
{
public virtual int Id { get; set; }
public virtual Track MainMix { get; set; }
public virtual IEnumerable<Track> SubMixes { get; set; }
public virtual IList<FileVersion> Files { get; set; }
}
public class FileVersion
{
public virtual int Id { get; set; }
public virtual Track Track { get; set; }
}
以下映射:
public class TrackMap : ClassMap<Track>
{
public TrackMap()
{
Id(x=>x.Id);
References(x => x.MainMix);
HasMany(x => x.SubMixes)
.Inverse()
.Cascade.All()
.KeyColumn("MainMix_id");
HasMany(a => a.Files)
.Access.CamelCaseField(Prefix.Underscore)
.Cascade.All();
}
}
public class FileVersionMap : ClassMap<FileVersion>
{
public FileVersionMap()
{
Id(x => x.Id);
References(x => x.Track);
}
}
为简单起见,省略了代码。 Track表有一个&#34; MainMix_id&#34;列,它是Track记录中父/子关系的自引用列。 当我尝试从数据库中获取一个轨道时,NHProfiler告诉我Nhibernate尝试使用以下查询来获取该轨道的文件转换:
SELECT files0_.MainMix_id as MainMix9_1_,
files0_.Id as Id1_,
files0_.Id as Id9_0_,
files0_.Track_id as Track8_9_0_
FROM [FileVersion] files0_
WHERE files0_.MainMix_id = 3 /* @p0 */
似乎它已将Track表的父ID列与其主键列混淆。当我从Track映射中删除引用(x =&gt; x.MainMix)时,查询是正确的,但我没有返回父跟踪记录。
如果我能够澄清这一点,请告诉我,并提前感谢您的帮助!
答案 0 :(得分:0)
这会有所作为吗?
TrackMap:
References(x => x.MainMix).Column("MainMix_id");
FileVersionMap:
References(x => x.Track).Column("Track_id");