「暫定」というコメントがついたソースは、そのまま放置される事が多い(´・ω・`)
暫定。
public static IEnumerable<T> WithUpdlock<T>(this DataContext context, IQueryable query) { DbCommand cmd = context.GetCommand( query.AsQueryable() ); // 暫定 Regex regex = new Regex( "FROM \\S+ AS \\[t0\\]" ); string cmdText = regex.Replace( cmd.CommandText, "$& WITH ( UPDLOCK )" ); object[] parameters = cmd.Parameters.Cast<IDbDataParameter>().Select( p => p.Value ).ToArray(); return context.ExecuteQuery<T>( cmdText, parameters ); }
使用。
TransactionOptions options = new TransactionOptions(); options.IsolationLevel = IsolationLevel.Serializable; using( TransactionScope sc = new TransactionScope( TransactionScopeOption.Required, options ) ) using( TestDataContext context = new TestDataContext() ) { IQueryable query = context.Employee.Where( employee => employee.No == 4054 ); Employee employee = context.WithUpdlock<Employee>( query ).SingleOrDefault(); // Insert or Update ... }
参考。
こんなことの一方で、Visual Studio 2005な環境用に単純なORMを作っていたり。
っというか、これも昔作ったものの再利用(っといっても再設計はしています)だけど。
とりあえず最下位レイヤのExecutorは用意した。
明日はEntityからのメタデータ作成処理と、SqlBuilderのあたりを出来るところまで作って、17日はお休みな方向で(・ω・)
来週はじめに完成すればいいや( ゚Д゚)