我们终于在我们的开发中达到了一个点,我们正在执行 CRUD 操作,除了我们自己的引用密钥清理(我们使用的是旧的预先设计的数据库)之外,大部分操作都有效。
我们遇到的问题是我们的具有复合键的对象似乎没有更新——即使改变了!
目前我只是试图更新屏幕编号属性,然后调用刷新。还有一些其他操作发生(例如删除),但它们是预期的并且与本示例无关。
谢谢!
我的映射如下:
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()