1

我们终于在我们的开发中达到了一个点,我们正在执行 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()

4

0 回答 0