私は現在EntityFrameworkでこの状況にあります:
using (TestEntities dataContext = DataContext)
{
UserSession session = dataContext.UserSessions.FirstOrDefault(userSession => userSession.Id == SessionId);
if (session != null)
{
session.LastAvailableDate = DateTime.Now;
dataContext.SaveChanges();
}
}
これは、私が期待するものと比較して非常に遅いという事実を除いて、すべて完璧に機能しています(1秒あたり14回の呼び出し、100回の反復でテスト)。このコマンドを使用してこのレコードを手動で更新すると、次のようになります。
dataContext.Database.ExecuteSqlCommand(String.Format("update UserSession set LastAvailableDate = '{0}' where Id = '{1}'", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fffffff"), SessionId));
1秒あたり55回の呼び出しがありますが、これは十分に高速です。ただし、session.LastAvailableDateを更新せずに、整数(たとえば、session.UserId)または文字列をEntity Frameworkで更新すると、1秒あたり50回の呼び出しが発生します。これも、十分な速度です。日時フィールドだけがひどく遅いです。
ファクター4の違いは受け入れがたいものであり、Entity Frameworkも使用できるのに直接SQLを使用するのは好きではないので、どうすればこれを改善できるのか疑問に思いました。
私はEntityFramework4.3.1を使用しています(4.1も試しました)。