1

私たちはついに開発者の中でCRUD操作を実行するポイントに到達しました。そのほとんどは、独自の参照キーのクリーンアップ(古い事前に設計されたデータベースを使用しています)を除いて機能します。

私たちが抱えている問題は、複合キーを持つオブジェクトが、変更されても更新されていないように見えることです。

現在、私は単にScreen Numberプロパティを更新してから、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()を呼び出すだけです。

4

0 に答える 0