私は参照とhasmany関係で2つのテーブルを設定しました。 Xref.SaveOrUpdate()が "このSqlParameterCollectionのCount = 7で無効なインデックス7"と呼ばれる場合例外がスローされます。私はHasManyとReferencesを正しく設定していないと感じています。私は何をすべきですか?Fluent Nhibernate Reference/HasMany関係はどのように動作するはずですか?
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);
}
}
を行うべきではありませんか?あなたはコードの例を挙げることができますか? – Anton
私はSaveOrUpdate()にコードを追加しました。 –