gpt4 book ai didi

c# - 无法初始化集合 - Fluent Nhibernate

转载 作者:太空宇宙 更新时间:2023-11-03 10:43:02 27 4
gpt4 key购买 nike

处理对象集合时出现错误

这是我的代码:

Toma.cs

public class Toma
{
public virtual int TomaID { get; protected set; }
public virtual DateTime FechaCarga { get; set; }
public virtual String TipoDocumento { get; set; }
public virtual String NroDocumento { get; set; }
public virtual Boolean Procesada { get; set; }

private IList<Dedo> dedos;
public virtual IList<Dedo> Dedos
{
get { return dedos; }
protected set { dedos = value; }
}
private IList<Firma> firmas;
public virtual IList<Firma> Firmas
{
get { return firmas; }
protected set { firmas = value; }
}
private IList<Foto> fotos;
public virtual IList<Foto> Fotos
{
get { return fotos; }
protected set { fotos = value; }
}

public Toma()
{
dedos = new List<Dedo>();
firmas = new List<Firma>();
fotos = new List<Foto>();
}

public virtual void MarcarComoProcesada()
{
this.Procesada = true;
this.Dedos[0].Imagen = new Byte[] { 0x20 };
this.Firmas[0].Imagen = new Byte[] { 0x20 };
this.Fotos[0].Imagen = new Byte[] { 0x20 };
//throw new NotImplementedException();
}

internal static IList<Toma> GetAll()
{
throw new NotImplementedException();
}
}

Dedo.cs

public class Dedo
{
public virtual int DedoID { get; protected set; }
public virtual Byte[] Imagen { get; set; }
public virtual Toma Toma { get; set; }
}

Firma.cs

public class Firma
{
public virtual int FirmaID { get; protected set; }
public virtual Byte[] Imagen { get; set; }
public virtual Toma Toma { get; set; }
}

Foto.cs

public class Foto
{
public virtual int FotoID { get; protected set; }
public virtual Byte[] Imagen { get; set; }
public virtual Toma Toma { get; set; }
}

我的映射:

Toma.cs

public class TomaMap : ClassMap<Toma>
{
public TomaMap()
{
Table("Bio_Toma");
Id(x=>x.TomaID).Column("TomaId");
Map(x => x.FechaCarga);
Map(x => x.TipoDocumento);
Map(x => x.NroDocumento);
Map(x => x.Procesada);
HasMany(x => x.Dedos).Inverse().Cascade.All().KeyColumn("DedoID").Inverse();
HasMany(x => x.Firmas).Inverse().Cascade.All().KeyColumn("FirmaID").Inverse();
HasMany(x => x.Fotos).Inverse().Cascade.All().KeyColumn("FotoID").Inverse();
}
}

Dedo.cs

public class DedoMap : ClassMap<Dedo>
{
public DedoMap()
{
Table("Bio_Dedo");
Id(x => x.DedoID);
Map(x => x.Imagen);
References(x => x.Toma).Column("TomaID");
}
}

Firma.cs

public class FirmaMap : ClassMap<Firma>
{
public FirmaMap()
{
Table("Bio_firma");
Id(x => x.FirmaID);
Map(x => x.Imagen);
References(x => x.Toma).Column("TomaID");
}
}

Foto.cs

public class FotoMap : ClassMap<Foto>
{
public FotoMap()
{
Table("Bio_Foto");
Id(x => x.FotoID);
Map(x => x.Imagen);
References(x => x.Toma).Column("TomaID");
}
}

我在哪里遇到错误:

                foreach (Toma toma in tomas)
{
... some other things...

if(toma.Fotos != null)
{
foreach (Foto foto in toma.Fotos) // HERE
fs.Write(foto.Imagen);
}
.... more code ....
}

查看问题并进行那里建议的更改,无法更正错误。我在想错误是否是必须处理的对象数量。 “Tomas”对象的数量是 41k。对于这些情况, session 对象有某种限制吗?

编辑:异常

'NHibernate.Exceptions.GenericADOException' en NHibernate.dll

Additional information:could not initialize a collection
[MJYS.DGSPR.Infraestructura.Entidades.Toma.Firmas#1039][SQL: SELECT firmas0_.FirmaID
as FirmaID1_, firmas0_.FirmaID as FirmaID1_0_, firmas0_.Imagen as Imagen1_0_,
firmas0_.TomaID as TomaID1_0_ FROM Bio_firma firmas0_ WHERE firmas0_.FirmaID=?]

最佳答案

问题隐藏在对KeyColumn的误解中. <key column"">HasMany 的情况下使用,作为集合表列名返回父表。

在我们的场景中,它很可能是 TomaID,所以映射应该是:

HasMany(x => x.Dedos)
//.Inverse().Cascade.All().KeyColumn("DedoID").Inverse();
.Inverse().Cascade.All().KeyColumn("TomaID").Inverse();
HasMany(x => x.Firmas)
//.Inverse().Cascade.All().KeyColumn("FirmaID").Inverse();
.Inverse().Cascade.All().KeyColumn("TomaID").Inverse();
HasMany(x => x.Fotos)
//.Inverse().Cascade.All().KeyColumn("FotoID").Inverse();
.Inverse().Cascade.All().KeyColumn("TomaID").Inverse();

这个映射是说:NHibernate,当搜索 soma Tomas 对象的子对象时,获取它的 ID,并在目标表中搜索它 - 列 TamaID。

这最终使生命圈完整,因为该列必须与我们在每个子集合实体的逆向映射中使用的列相同:

...
References(x => x.Toma).Column("TomaID");

关于c# - 无法初始化集合 - Fluent Nhibernate,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24575756/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com