1

ASP.NET MVC アプリケーションで、プロキシベースの変更追跡で EF5 コード ファーストを使用しています。ドメイン クラスの 1 つに、頻繁に更新される数値プロパティが含まれています。このため、このプロパティはフレームワークを使用してデータベースに保持されません。

public virtual int CurrentSessions
{
    get
    {
        return _currentSessions;
    } 

    set
    {
        Interlocked.Exchange(ref _currentSessions, value);
    }
}

私が直面している問題は、プロパティの値がセッション間で更新されないことです。私の API コントローラーは、次のように、内部ロジックに従って、上記の値を増加または減少させます。

myObj.CurrentSessions++;

また

myObj.CurrentSessions--;

ここで、myObj は、各セッションで LINQ を介してコンテキストから取得されたプロキシ オブジェクトです。

var myObj = objectContext.Instances<myPocoEntity>().FirstOrDefault(cb => cb.SomeProp == someValue);

増減後に myObj.CurrentSessions の値を調べると、確かに更新されますが、次のサーバー要求で myObj が再度取得されると、CurrentSessions の初期値は常にゼロになります。

コンテキスト全体の変更をスキャンせずに、POCO エンティティでプロパティ値が更新されていることを確認するにはどうすればよいですか?

4

1 に答える 1

0

私があなたの質問を正しく理解していれば、別の DbContext オブジェクトがあり、一方がオブジェクトを更新すると、データベース内のオブジェクトに対する次のリクエストまで変更が表示されませんか?

その場合、DbEntityEntry クラスを介して問題のオブジェクトを再読み込みできる場合があります。

次に、「Reload()」メソッドまたは「GetDatabaseValues()」メソッドを使用して、データベースに現在存在する値を取得できます。

// Reload Usage
context.Entry(entity).Reload();


// GetDatabaseValues Usage
DbPropertyValues propertyValues = context.Entry(entity).GetDatabaseValues();
foreach (DbPropertyValue val in propertyValues)
{
    ...
}
于 2012-12-23T22:13:34.857 に答える