集合外键映射具有错误的列数

时间:2015-09-29 07:06:10

标签: c# nhibernate fluent-nhibernate

我是Hava一个名为VarianteValore的班级,这个班级有一个Foto的集合,VarianteValore的主键是一个复合复合词。
现在当Map我的类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);
    }
}

我希望下面的代码可以更好地说明。在此先感谢您的任何帮助

1 个答案:

答案 0 :(得分:0)

Foto应该引用其父级而不是其父级id部分

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