NHibernate更新不保存复合键

时间:2012-05-03 09:29:37

标签: fluent-nhibernate nhibernate-mapping composite-key

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

0 个答案:

没有答案