1

以下のコードを実行すると、レコードが追加されますが、最初は ContactSet に含まれません。もう一度実行した場合にのみ、ContactSetに表示され、レコードが複製されるという事実に加えて、一度表示されます。作成された新しいレコードが ContactSet に表示されない理由は何ですか?

       var xrm = new XrmServiceContext("Xrm");

        //Create a new contact called Allison Brown.
        var testContact = new Contact
        {
            FirstName = "Allison",
            LastName = "Brown",
            Address1_Line1 = "101 W 1st St",
            Address1_City = "Los Angeles",
            Address1_StateOrProvince = "CA",
            Address1_PostalCode = "90001",
            Telephone1 = "310-111-1111",
            EMailAddress1 = "allisonbrown@aol.com"
        };

        xrm.AddObject(testContact);
        xrm.SaveChanges();
        var exampleContacts = xrm.ContactSet.Where(c => c.EMailAddress1.EndsWith(".com"));
        return View(exampleContacts);
4

1 に答える 1

1

これは、コンテキストがレコードを追跡する方法に関係しています。デフォルトでは、MergeOption 列挙は AppendOnly に設定されています。これは、レコードがコンテキストで追跡されると、サーバーからのデータで更新されないことを意味します。そのため、testContact の追跡を開始したときに、それを取得することはできません。これは、それを "新しい" レコード (Guid なし) と見なすためです。そのため、コンテキストの列挙を NoTracking または OverwriteChanges に設定することをお勧めします。そうすれば、コンテキストでレコードを追跡したり、レコードを取得するための呼び出しを行ったときにレコードを更新したりしません。

于 2013-04-09T20:55:44.913 に答える