我有一个现有的数据库,它有三个表,两个实体表和一个链接表。两个实体表中的每一个都具有主键id。一个使用int,一个使用guid。连接表包含两列,即每个表的主键。所以,粗略看起来像这样:
表1:问题 Id - 主键,int
表2:资产 Id - 主键,guid
表3:QuestionAsset
资产 - (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");
...
}
}
我尝试了更多的关系迭代,而不是承认让链接表填充。我该如何定义这种关系?我无法更改数据库。
现在,使用上面的代码我得到以下异常:
无法确定类型:Question.Model.NHibernate.NAsset,Question,Version = 1.0.0.0,Culture = neutral,PublicKeyToken = null,对于列:NHibernate.Mapping.Column(Id)
答案 0 :(得分:0)
如果是,
我们应该不介绍配对对象,直接映射两端
public class NQuestion
{
public virtual int Id { get; set; }
...
//public virtual IList<NQuestionAsset> Assets { get; set; }
public virtual IList<Asset> Assets { get; set; }
并且HasManyToMany
将起作用
public QuestionMap()
{
...
HasManyToMany(x => x.Assets)
.Table("QuestionAsset")
.ParentKeyColumn("Asset")
.ChildKeyColumn("Question")
...;
在此处查看更多信息