У меня есть две таблицы настройки со ссылкой и отношением hasmany.Когда Xref.SaveOrUpdate () вызывается, «Неверный индекс 7 для этой коллекции SqlParameterCollection с счетом = 7».исключение брошено.У меня такое ощущение, что я неправильно настраиваю HasMany и References.Что я должен делать по-другому?
public class PortalPhysicianMap : ClassMap<PortalPhysician>
{
public PortalPhysicianMap()
{
Table("PortalPhysicians");
Id(x => x.PhysicianRno).GeneratedBy.Identity();
Map(x => x.A1PhysicianRno);
Map(x => x.LastName);
Map(x => x.FirstName);
Map(x => x.TitleName);
Map(x => x.SuffixName);
Map(x => x.CorrName);
Map(x => x.Specialty);
Map(x => x.Institution);
Map(x => x.Addr1);
Map(x => x.Addr2);
Map(x => x.City);
Map(x => x.State);
Map(x => x.PostalCode);
Map(x => x.Country);
Map(x => x.Phone);
Map(x => x.Fax);
Map(x => x.InactiveDt);
Map(x => x.CreatedDate, "CreatedDt");
Map(x => x.UpdatedDate, "UpdatedDt");
HasMany(x => x.Xrefs)
.KeyColumn("A1PhysicianRno");
//.Cascade.All();
}
}
public class PortalLoginPhyXrefMap : ClassMap<PortalLoginPhyXref>
{
public PortalLoginPhyXrefMap()
{
Table("PortalLoginPhyXref");
Id(x => x.XrefRno).GeneratedBy.Identity();
Map(x => x.LoginRno);
Map(x => x.A1PhysicianRno);
Map(x => x.UserName);
Map(x => x.UserRole);
Map(x => x.InactiveDt);
Map(x => x.CreatedDate, "CreatedDt");
Map(x => x.UpdatedDate, "UpdatedDt");
References<PortalPhysician>(x => x.Login)
.Column("LoginRno");
}
}
using (ISession s = Env.dbPortal.OpenSession())
{
try
{
using (ITransaction Trans = s.BeginTransaction())
{
Trans.Begin();
foreach (PortalLogin Login in lstLogins)
{
if (Login.UserName != null)
{
Login.SaveOrUpdate(s);
foreach (PortalLoginPhyXref Xref in Login.Xrefs)
{
Xref.LoginRno = Login.LoginRno;
Xref.SaveOrUpdate(s);
}
}
}
Trans.Commit();
}
}
catch (Exception Ex)
{
frmError.Show(Ex);
}
}
Дополнительный код, показывающий, что происходит в SaveOrUpdate ()
public class PortalLoginPhyXref : BaseRec
{
public virtual void SaveOrUpdate(ISession Sess)
{
base.SaveOrUpdate(Sess, XrefRno);
}
}
public abstract class BaseRec
{
public virtual DateTime CreatedDate { get; set; }
public virtual string CreatedUserID { get; set; }
public virtual DateTime? UpdatedDate { get; set; }
public virtual string UpdatedUserID { get; set; }
public virtual void SaveOrUpdate(ISession Sess, int Rno)
{
SaveOrUpdate(Sess, (Rno == 0));
}
public virtual void SaveOrUpdate(ISession Sess, string ID)
{
SaveOrUpdate(Sess, (ID == null));
}
private void SaveOrUpdate(ISession Sess, bool Save)
{
if (Save)
{
CreatedDate = DateTime.Now;
CreatedUserID = Env.UserID;
}
UpdatedDate = DateTime.Now;
UpdatedUserID = Env.UserID;
Sess.SaveOrUpdate(this);
}
}