我有一个现有的数据库,它有三个表、两个实体表和一个链接表。两个实体表中的每一个都有一个主键id。一个使用int,另一个使用guid。联接表包含两列,即每个表的主键。所以,大致看起来是这样的:
表1:问题
Id-主键,int
表2:资产
Id-主键,guid
表3:问题资产
资产-(PK,FK guid)
问题-(PK,FK,int)
我的课程设置如下:
public class NQuestion
{
public virtual int Id { get; set; }
...
public virtual IList<NQuestionAsset> Assets { get; set; }
}
public class NQuestionAsset
{
public virtual NAsset Asset { get; set; }
public virtual NQuestion Question { get; set; }
}
public class NAsset
{
public virtual Guid Id { get; set; }
...
}
public class QuestionMap : ClassMap<NQuestion>
{
public QuestionMap()
{
Table("Question");
LazyLoad();
Id(q => q.Id).GeneratedBy.Identity().Column("Id");
...
HasManyToMany(x => x.Assets).Table("QuestionAsset")
.ParentKeyColumns.Add("Asset", "Question")
.Not.LazyLoad();
}
}
public class QuestionAssetMap : ClassMap<NQuestionAsset>
{
public QuestionAssetMap()
{
Table("QuestionAsset");
LazyLoad();
CompositeId().KeyProperty(a => a.Asset, "Id").KeyProperty(a => a.Question, "QuestionId");
References(a => a.Asset.Id).Column("Asset");
References(a => a.Question.QuestionId).Column("Question");
}
}
public class AssetMap : ClassMap<NAsset>
{
public AssetMap()
{
Table("Asset");
LazyLoad();
Id(q => q.Id).GeneratedBy.GuidComb().Column("Id");
...
}
}
我尝试了比我愿意承认的更多的关系迭代来填充链接表。我如何定义这种关系?我无法更改数据库。
无法确定:问题的类型。模型NHibernate。NAsset,Question,Version=1.0.0.0,Culture=neutral,PublicKeyToken=null,对于列:NHibernate。映射。列(Id)