C# 集合外键映射的列数错误

C# 集合外键映射的列数错误,c#,nhibernate,fluent-nhibernate,C#,Nhibernate,Fluent Nhibernate,我有一个名为VarianteValore的类这个类有一个Foto的集合,VarianteValore的主键是一个multiple compositeId。 现在,当映射我的类NHibernate时,返回上面的异常。 我每天都在努力解决映射问题,但我还没有找到解决方案 下面是我的类和映射 public class VarianteValore : EntityBase { #region Private private ICollection<Foto> _i

我有一个名为VarianteValore的类这个类有一个Foto的集合,VarianteValore的主键是一个multiple compositeId。
现在,当映射我的类NHibernate时,返回上面的异常。 我每天都在努力解决映射问题,但我还没有找到解决方案

下面是我的类和映射

 public class VarianteValore : EntityBase
{
    #region Private
        private ICollection<Foto> _immagini;
    #endregion

    public virtual VarianteProdotti VarianteProdotti { get; set; }
    public virtual GruppoAttributi GruppoAttributi { get; set; }
    public virtual AttributiValore AttributiValore { get; set; }


    public virtual ICollection<Foto> Foto
    {
        get { return _immagini != null ? _immagini : new List<Foto>(); ; }
        set { _immagini = value; }
    }

    public virtual double OffSetPrezzo { get; set; }

    public override bool Equals(object obj)
    {
        if (obj == null)
            return false;
        VarianteValore id;
        id = (VarianteValore)obj;
        if (id == null)
            return false;
        if (this.Id == id.Id && this.VarianteProdotti.Prodotti == id.VarianteProdotti.Prodotti && this.GruppoAttributi.Attributi == id.GruppoAttributi.Attributi)
            return true;
        return false;
    }

    public override int GetHashCode()
    {
        return (this.Id + "|" + this.VarianteProdotti.Prodotti + "|" + this.GruppoAttributi.Attributi).GetHashCode();
    }

}

  public class Foto : EntityBase
{
    public virtual VarianteProdotti VarianteProdotti { get; set; }
    public virtual GruppoAttributi GruppoAttributi { get; set; }
    public virtual Prodotti Prodotti { get; set; }
    public virtual string Path { get; set; }
    public virtual bool Pubblicata { get; set; }

    public virtual bool IsVideo { get; set; }
    public virtual int Position { get; set; }

    public virtual string Alt { get; set; }

    public override bool Equals(object obj)
    {
        if (obj == null)
            return false;
        Foto id;
        id = (Foto)obj;
        if (id == null)
            return false;
        if (this.Id == id.Id && this.VarianteProdotti == id.VarianteProdotti)
            return true;
        return false;
    }

    public override int GetHashCode()
    {
        return (this.Id + "|" + this.VarianteProdotti).GetHashCode();
    }
}

 public class VarianteValoreMap : ClassMap<VarianteValore>
{
    public VarianteValoreMap()
    {
        CompositeId()
           .KeyReference(x => x.VarianteProdotti, "Prodotti_Id", "VarianteProdotti_Id")
          .KeyReference(x => x.GruppoAttributi, "Prodotti_Id", "Attributi_Id");

        //FK AttributiValore 
        References(x => x.AttributiValore, "AttributiValore_Id");

        HasMany(x => x.Foto).KeyColumns.Add("Prodotti_Id", "VarianteProdotti_Id", "Attributi_Id");

    }
}

public class FotoMap : ClassMap<Foto>
{
    public FotoMap()
    {
        Id(x => x.Id).GeneratedBy.Identity();
        References(x => x.VarianteProdotti).Columns("Prodotti_Id", "VarianteProdotti_Id", "Attributi_Id");
        Map(x => x.Path).Length(400);
        Map(x => x.Pubblicata);
        Map(x => x.IsVideo);
        Map(x => x.Position);
    }
}
public类VarianteValore:EntityBase
{
#地区私人
私人ICollection_Imagini;
#端区
公共虚拟VarianteProdotti VarianteProdotti{get;set;}
公共虚拟GruppoAttributi GruppoAttributi{get;set;}
公共虚拟attributevalore attributevalore{get;set;}
公共虚拟ICollection Foto
{
获取{return _immagini!=null?_immagini:new List();}
集合{u immagini=value;}
}
公共虚拟双偏移量prezzo{get;set;}
公共覆盖布尔等于(对象对象对象)
{
if(obj==null)
返回false;
变异Valore id;
id=(VarianteValore)obj;
if(id==null)
返回false;
if(this.Id==Id.Id&&this.VarianteProdotti.Prodotti==Id.VarianteProdotti.Prodotti&&this.GruppoAttributi.attributei==Id.GruppoAttributi.attributei)
返回true;
返回false;
}
公共覆盖int GetHashCode()
{
返回(this.Id+“|”+this.VarianteProdotti.Prodotti+“|”+this.GruppoAttributi.attributei.GetHashCode();
}
}
公共类Foto:EntityBase
{
公共虚拟VarianteProdotti VarianteProdotti{get;set;}
公共虚拟GruppoAttributi GruppoAttributi{get;set;}
公共虚拟Prodotti Prodotti{get;set;}
公共虚拟字符串路径{get;set;}
公共虚拟bool publiblicata{get;set;}
公共虚拟bool IsVideo{get;set;}
公共虚拟整数位置{get;set;}
公共虚拟字符串Alt{get;set;}
公共覆盖布尔等于(对象对象对象)
{
if(obj==null)
返回false;
Foto id;
id=(Foto)obj;
if(id==null)
返回false;
if(this.Id==Id.Id&&this.VarianteProdotti==Id.VarianteProdotti)
返回true;
返回false;
}
公共覆盖int GetHashCode()
{
return(this.Id+“|”+this.VarianteProdotti.GetHashCode();
}
}
公共类变量从价映射:类映射
{
公共变量从价映射()
{
复合ID()
.KeyReference(x=>x.VarianteProdotti,“Prodotti\u Id”,“VarianteProdotti\u Id”)
.KeyReference(x=>x.GruppoAttributi,“产品Id”,“属性Id”);
//FK属性值
参考文献(x=>x.attributevalore,“attributevalore_Id”);
HasMany(x=>x.Foto).KeyColumns.Add(“Prodotti_Id”、“VarianteProdotti_Id”、“attributei_Id”);
}
}
公共类FotoMap:ClassMap
{
公共FotoMap()
{
Id(x=>x.Id).GeneratedBy.Identity();
参考(x=>x.VarianteProdotti).列(“Prodotti_Id”、“VarianteProdotti_Id”、“attributei_Id”);
映射(x=>x.Path)。长度(400);
地图(x=>x.Pubblicata);
地图(x=>x.IsVideo);
地图(x=>x.Position);
}
}

我希望下面的代码可以更好地说明。提前感谢您提供的任何帮助

Foto应参考其父项,而不是其父项id部分

public class Foto : EntityBase
{
    public virtual VarianteValore VarianteValore { get; set; }
...
}