0

BOM には codefluent エンティティ、コントローラーには webapi、クライアント側には angularjs フレームワークを使用しています。

オブジェクトの参照を親オブジェクトに保存するときに問題に直面しています。いつでも、生成されたコードによって参照が無効になります。

リレーションシップ EntA[EntAId, prop1, EntB] と EntB[EntBId, prop1, prop2] を持つ 2 つのエンティティがある場合、最終的に 2 つのクラスになります。

class EntA{
   EntAId
   prop1
   EntB
   EntBEntBId
}

class EntB{
   EntBId
   prop1
   prop2
}

CodeFluent は次のコードを生成しました。

        [System.Xml.Serialization.XmlElementAttribute(IsNullable=false)]
    [System.ComponentModel.DataObjectFieldAttribute(true)]
    public System.Guid EntBEntBId
    {
        get
        {
            if (((this._EntBEntBId.Equals(CodeFluentPersistence.DefaultGuidValue) == true) 
                        && (this._entB != null)))
            {
                this._EntBEntBId = this._entB.EntBId;
            }
            return this._EntBEntBId;
        }
        set
        {
            if ((System.Collections.Generic.EqualityComparer<System.Guid>.Default.Equals(value, this.EntBEntBId) == true))
            {
                return;
            }
            this._entB = null;
            this._EntBEntBId = value;
            this.EntityState = CodeFluent.Runtime.CodeFluentEntityState.Modified;
            this.OnPropertyChanged(new System.ComponentModel.PropertyChangedEventArgs("EntB"));
            this.OnPropertyChanged(new System.ComponentModel.PropertyChangedEventArgs("EntBEntBId"));
        }
    }

    [System.Xml.Serialization.XmlIgnoreAttribute()]
    public Namespace.EntB.EntB EntB
    {
        get
        {
            if ((this._entB == null))
            {
                this._entB = Namespace.EntB.EntB.Load(this._EntBEntBId);
            }
            return this._entB;
        }
        set
        {
            this._EntBEntBId = CodeFluentPersistence.DefaultGuidValue;
            this._entB = value;
            this.EntityState = CodeFluent.Runtime.CodeFluentEntityState.Modified;
            this.OnPropertyChanged(new System.ComponentModel.PropertyChangedEventArgs("EntB"));
            this.OnPropertyChanged(new System.ComponentModel.PropertyChangedEventArgs("EntBEntBId"));
        }
    }

objectA.EntBEntBIdクライアント側 (Angular を使用) では、EntB オブジェクト全体を送信せずに登録したいと考えています。したがって、以下のスニペットを使用して EntB を無効にすることを検討します。

if(objectA.EntB)
    objectA.EntB = null

これにより、正しい Stream がサーバーに送信されます (B オブジェクト全体がシリアル化されることはありません)。

HTTP PUT 呼び出しがトリガーされると、webapi は最初に get/set メソッドを通過してクラスを評価します。プロパティ EntBEntBId は正しく評価されますが、EntB プロパティのセッターは以前の値を消去し続けます (EntB は現在 null であるため)。

このような動作を回避する方法はありますか?

回答ありがとうございます。

4

1 に答える 1

1

私は自分の質問に答えているかもしれませんが、Streamdelete objectA.entBの代わりに使用するとobjectA.entB = nullentB プロパティが含まれないため、セッターを経由しません。

于 2016-03-03T10:02:24.690 に答える