我是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);
}
}
我希望下面的代码可以更好地说明。在此先感谢您的任何帮助
答案 0 :(得分:0)
Foto应该引用其父级而不是其父级id部分
public class Foto : EntityBase
{
public virtual VarianteValore VarianteValore { get; set; }
...
}