質問

ADO.NET Data Servicesで苦労している質問があります:

ストレージ用にエンティティを組み立てるとき、ルックアップファイルから関連する値を取得する必要があります。たとえば、ある人にはStatusCodesというテーブルにある「保留中」のステータスコードが割り当てられています。

Entity Frameworkでは、person.StatusCodeの値をStatusCodeのインスタンスに設定する必要があります。 Entity FrameworkまたはLINQ2Sqlでは、次のようになります:

      var person = Person.CreatePerson(stuff);

  var statCode = myContext.StatusCodeSet.Where(sc => sc.Description == "Pending").FirstOrDefault();

  person.StatusCode = statCode;

  // ...more code here...

  myContext.BeginSaveChanges(SaveChangesOptions.Batch,

                                new AsyncCallback(OnSaveAllComplete),

                                null);

statCodeのクエリはADO.NET Data Servicesで機能せず、関数がサポートされていないという実行時エラーが表示されます。 statCodeルックアップが非同期呼び出しではないためだと思います。

ただし、

      var person = Person.CreatePerson(stuff);
  var query = from stat in myContext.StatusCodeSet
              where stat.Description == "Pending"
              select stat;
  var dsQuery = (DataServiceQuery<StatusCode>)query;
  dsQuery.BeginExecute(
      result => tutorApplication.StatusCode = dsQuery.EndExecute(result).FirstOrDefault(), null);
  // ...more code here...
  myContext.BeginSaveChanges(SaveChangesOptions.Batch,
                            new AsyncCallback(OnSaveAllComplete),
                            null);

クエリの非同期性のために動作しません。結果は、人が保存される前に戻りません。

これに正しくアプローチしていますか

ありがとう

役に立ちましたか?

解決

これで寝た後、私は次のことを思いつきました:

  var person = Person.CreatePerson(stuff);
  var appStatPending = new StatusCode()
  {
    StatusCodeId = (int)StatusCodes.Pending,
    Code = "Pending",
    Description = "Pending",
    EffectiveDate = DateTime.Now,
    EnteredBy = "",
    EnteredDate = DateTime.Now
  };

  myContext.AttachTo("StatusCodeSet", appStatPending);
  person.StatusCode = appStatPending;
  myContext.SetLink(tutorApplication, "StatusCode", appStatPending);


  // ...more code here...  
  myContext.BeginSaveChanges(SaveChangesOptions.Batch,
    new AsyncCallback(OnSaveAllComplete),
    null);

ステータスコードのローカルコピーを作成し、それをコンテキストにリンクできます。 StatusCode.CreateStatusCode()を実行するのではなく、appStatPendingを更新することが重要です。これを行うと、人のグラフが永続化されたときに新しいStatusCodeがデータベースに追加されます。同じ理由で、AttachTo(<!> quot; StatusCodeSet <!> quot ;, appStatPending)を実行することが重要です。myContext.AddToStatusCodeSet()を実行すると、データベースのStatusCodesテーブルにも新しいエントリが追加されるためです。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top