2017-01-12 21 views
0

私はcrm(on prem)に接続してアカウントレコードを取得するwcfを持っています。エンティティが取得されたときに現在のレコードが保持されていない、つまり一部のフィールドに古い列の値が保持されていることがわかります。私は無駄にさまざまなマージオプションを試してみました。以下のコードを参照してくださいXrmServiceContextオブジェクトがCRMから最新のデータを取得していません

using (XrmServiceContext cContext = new XrmServiceContext(con)) 
{     
    Entity ent = cContext.Retrieve(ConstantKVP.AccountSchema.ENTITY_LOGICAL_NAME, AccountId, new ColumnSet(true)); 
} 

何か提案がありますか?取り出しのために使用することを保存する明確な変化cContext.ClearChanges();

+0

変更しようとしているデータが保存されていることを確認して、コンテキストがデータベース値にアクセスします。これらの新しい値を保存せずに変更した場合、データベースに永続化されません –

+0

私は自分自身を正しく説明していないと思います...データはcrm形式でcrmに直接保存されます。 wcfはそれ以降の日付を取得しますが、それでもフィールドの前の値を維持します... –

答えて

0

はそれが可能ですデータはキャッシュされていますか?

cContext.TryAccessCache(cache => cache.Mode = OrganizationServiceCacheMode.Disabled);

私はCrmOrganizationServiceContextために、このアプローチを取ったので、おそらく同じ理論が適用されます。

+0

私はすでに変更初期バインドされたorgサービスプロキシを使用するようにします。コードはデータモデルの大幅な変更を伴って、はるかに綺麗に見えます(私は速く言う)。とにかく答えは+1です... –

0

アップにNEW organizationserviceを渡すことによって、新しいXrmServiceContextオブジェクトを作成しますMergeOption.OverwriteChanges

それとも

を使用します。

var uncachedOrganizationService = new OrganizationService("Xrm"); 
var uncachedXrmServiceContext = new XrmServiceContext(uncachedOrganizationService); 
var ent = uncachedXrmServiceContext.Retrieve(ConstantKVP.AccountSchema.ENTITY_LOGICAL_NAME,AccountId,new ColumnSet(true)); 
+0

申し訳ありませんが、最初の解決策は機能しませんでした..第2のものは少し冗長であるようです..私は迅速にコンソールアプリケーションそれは組織のサービスプロキシを使用しているようだが、この問題を思い付きません。しかし、それは早い段階の授業に挨拶することを意味します。 –

+0

明確に変更する前にオブジェクトをデタッチしましたか? – dynamicallyCRM

+0

存在するため、オブジェクトを添付しません。私はちょうど初めてのレコードを選択しています... –

関連する問題