我们终于在我们的开发中达到了一个点,我们正在执行CRUD操作,除了我们自己引用的密钥清理(我们使用旧的预先设计的数据库)之外,其中大多数都可以工作。
我们遇到的问题是我们的具有复合键的对象似乎没有更新 - 即使在更改时也是如此!
目前我只是尝试更新屏幕编号属性,然后调用flush。还有一些其他操作发生(例如删除),但它们是预期的,与此示例无关。
谢谢!
我的映射如下:
public class Xref_el_c : ClassMap<Xref_EntityCaseEntity>
{
public Xref_el_c()
{
Table("Xref_el_c");
CompositeId()
.KeyProperty(x => x.EntityRef, "xelc_el_ref")
.KeyProperty(x => x.Case, "xelc_c_ref")
.KeyProperty(x => x.ScreenNumber, "xelc_screen");
}
}
/ 物体 /
public class Xref_EntityCaseEntity : BaseCompositeEntity
{
public virtual int EntityRef { get; set; }
public virtual int Case { get; set; }
public virtual int? ScreenNumber { get; set; }
public override bool Equals(object obj)
{
if (obj == null)
return false;
Xref_EntityCaseEntity xe = obj as Xref_EntityCaseEntity;
if (xe == null)
return false;
return EntityRef == xe.EntityRef && Case == xe.Case && ScreenNumber == xe.ScreenNumber;
}
public override int GetHashCode()
{
return (EntityRef + "|" + Case + "|" + ScreenNumber).GetHashCode();
}
}
代码完成以下工作:
IEnumerable<Xref_EntityCaseEntity> xrefs = GetEntityCrossReferenceLinks(entCode, caseRef);
foreach (var item in xrefs)
{
if (item.EntityRef != reference) //because the deletion won't actually happen until Dispose() is called, we could essentially queue an update for a delete item.
{
if (item.ScreenNumber == null || (item.ScreenNumber == 0 || item.ScreenNumber == 0))
{
item.ScreenNumber = 1;
}
else
{
item.ScreenNumber = item.ScreenNumber - 1;
}
_entityToCaseXref.Update(item);
}
}
此处标记的更新只调用Session.Update()和Session.Flush()