繁体   English   中英

流利的NHibernate映射没有主键的联接表

[英]Fluent NHibernate Mapping a join table without a primary key

我有一个具有三个表,两个实体表和一个链接表的现有数据库。 两个实体表中的每个表都有一个主键id。 一个使用int,另一个使用guid。 联接表包含两列,每个表的主键。 因此,大致如下所示:

表1:问题ID-主键,整数

...

表2:资产ID-主键,GUID

...

表3:QuestionAsset

资产-(PK,FK GUID)

问题-(PK,FK,整数)

我的班级设置如下:

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)

如果,

  • 配对表中没有自己的ID
  • 只有两列,外键

我们应该引入配对对象, 只是地图都直接结束

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")
         ...;

在这里查看更多

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM