Frage

Ich habe eine Frage, die ich mit in ADO.NET Data Service bin zu kämpfen:

Wenn ein Unternehmen für die Lagerung der Montage Ich brauche einen Zusammenhang Wert aus einer Lookup-Datei zu erhalten. Zum Beispiel hat eine Person einen Statuscode zugewiesen von ‚Pending‘, die in einer Tabelle namens status ist.

In Entity Framework, würde ich muß den Wert von person.StatusCode gleich eine Instanz des Statuscode einzustellen. Im Entity Framework oder in Linq2Sql würde ich so etwas wie folgt aus:

      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);

Die Abfrage für die STATCODE nicht in ADO.NET Data Services arbeiten und ich bekomme ein Laufzeitfehler die Funktion sagen, wird nicht unterstützt. Ich nehme an, es ist, weil die STATCODE Lookup kein Async Anruf ist.

Allerdings

      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);

nicht funktioniert entweder aufgrund der Async Art der Abfrage wird nicht das Ergebnis, bevor die Person wieder speichern passiert.

Am nähere ich das richtig?

Danke

War es hilfreich?

Lösung

Nach dem Einschalten dieser schlief ich kam mit den folgenden:

  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);

Ich kann eine lokale Kopie des Statuscodes erstellen und sie in den Kontext verknüpfen. Es ist wichtig, neuer das appStatPending, anstatt eine StatusCode.CreateStatusCode tun (), da das zu tun wird einen neuen Statuscode zur Datenbank hinzufügen, wenn die Person Graph anhielt. Aus dem gleichen Grunde zu tun, fügen Sie es ist wichtig, die AttachTo ( „StatusCodeSet“, appStatPending), da tut myContext.AddToStatusCodeSet () auch einen neuen Eintrag in der Statuscodes Tabelle in der Datenbank.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top