チェンジセット 1650 (default)


以下の違いを無視:
日時:
2024/06/21 15:37:11 (4ヵ月前)
更新者:
hizuya@…
ログメッセージ:
  • UPDATE or INSERT を行う機能を追加。
  • ビーンによるデータ更新時、データが無い場合にロックを維持する機能を追加。
場所:
framework/trunk
ファイル:
2個の追加
5個の更新

凡例:

未変更
追加
削除
  • framework/trunk/CoreLibrary/Resources/Data/DbDataOperator.st

    r1643 r1650  
    2929        UPDATE 
    3030                ${Update_TableName} 
     31        SET 
     32                ${Update_FieldNamesAndValues} 
     33        WHERE 
     34                ${Update_Where} 
     35 
     36UpdateSafe= 
     37        UPDATE 
     38                ${Update_TableName} WITH (SERIALIZABLE) 
    3139        SET 
    3240                ${Update_FieldNamesAndValues} 
  • framework/trunk/CoreLibrary/Sources/Data/DataExtensions.cs

    r1532 r1650  
    4444        /// コマンドを実行した結果のビーンの一覧。 
    4545        /// </returns> 
     46        /// <exception cref="MultipleResultException"> 
     47        /// リザルトが複数存在しました。 
     48        /// </exception> 
    4649        public static IList<T> ReadAll<T>( 
    4750            this ICommonDbCommand command) 
     
    756759        /// プライマリキーに指定されているフィールドは更新できません。 
    757760        /// </remarks> 
    758         /// <see cref="DbDataOperator.Update{T}(ICommonDbTransaction, T, bool)"/> 
     761        /// <see cref="DbDataOperator.Update{T}(ICommonDbTransaction, T, bool, bool)"/> 
    759762        public static T Update<T>( 
    760763            this ICommonDbTransaction transaction, 
     
    764767        { 
    765768            return DbDataOperator.Update(transaction, bean, throwOnUnexpectedAffectedRows, useInstanceType) == 1 
     769                ? bean 
     770                : default(T); 
     771        } 
     772 
     773        /// <summary> 
     774        /// <see cref="DbTableAttribute"/> 属性の設定されたビーンのプライマリキーの値を条件に 
     775        /// <c>UPDATE</c> を実行します。 
     776        /// </summary> 
     777        /// <typeparam name="T"> 
     778        /// <paramref name="bean"/> パラメータの型。 
     779        /// </typeparam> 
     780        /// <param name="transaction"> 
     781        /// トランザクション。 
     782        /// </param> 
     783        /// <param name="bean"> 
     784        /// <see cref="DbTableAttribute"/> 属性の設定されたクラスのインスタンス。 
     785        /// </param> 
     786        /// <param name="throwOnUnexpectedAffectedRows"> 
     787        /// 更新結果が 1 ではない場合に 
     788        /// <see cref="UnexpectedAffectedRowsException"/> をスローする場合は <see langword="true"/>。 
     789        /// それ以外の場合は <see langword="false"/>。 
     790        /// </param> 
     791        /// <param name="useInstanceType"> 
     792        /// ビーンのインスタンスの型からビーン情報を取得する場合は <see langword="true"/>。 
     793        /// <typeparamref name="T"/> からビーン情報を取得する場合は <see langword="false"/>。 
     794        /// </param> 
     795        /// <param name="holdLock"> 
     796        /// 更新対象が無かった場合でもロックを維持する場合は <see langword="true"/>。 
     797        /// それ以外の場合は <see langword="false"/>。 
     798        /// </param> 
     799        /// <returns> 
     800        /// 更新された場合は <paramref name="bean"/> に指定されたインスタンス。 
     801        /// それ以外の場合は <see langword="null"/> 参照です。 
     802        /// </returns> 
     803        /// <exception cref="ArgumentNullException"> 
     804        /// <paramref name="bean"/> が <see langword="null"/> 参照です。 
     805        /// </exception> 
     806        /// <exception cref="InvalidOperationException"> 
     807        /// データの更新が許可されていないビーンです。 
     808        /// </exception> 
     809        /// <exception cref="ArgumentException"> 
     810        /// <paramref name="bean"/> のクラスに<see cref="DbTableAttribute"/> 属性が設定されていないか、 
     811        /// <see cref="DbFieldAttribute"/> 属性を持つプロパティが無いか、 
     812        /// プライマリキーの指定があるプロパティの値が不正か、 
     813        /// または、値の設定されたフィールドが存在しません。 
     814        /// </exception> 
     815        /// <exception cref="UnexpectedAffectedRowsException"> 
     816        /// 更新件数が 1 ではありません。 
     817        /// </exception> 
     818        /// <remarks> 
     819        /// プライマリキーに指定されているフィールドは更新できません。 
     820        /// </remarks> 
     821        /// <see cref="DbDataOperator.Update{T}(ICommonDbTransaction, T, bool, bool, bool)"/> 
     822        public static T Update<T>( 
     823            this ICommonDbTransaction transaction, 
     824            T bean, 
     825            bool throwOnUnexpectedAffectedRows, 
     826            bool useInstanceType, 
     827            bool holdLock) 
     828        { 
     829            return DbDataOperator.Update(transaction, bean, throwOnUnexpectedAffectedRows, useInstanceType, holdLock) == 1 
    766830                ? bean 
    767831                : default(T); 
     
    920984        /// プライマリキーに指定されているフィールドは更新できません。 
    921985        /// </remarks> 
    922         /// <see cref="DbDataOperator.Update{T}(ICommonDbTransaction, T, bool)"/> 
     986        /// <see cref="DbDataOperator.Update{T}(ICommonDbTransaction, T, bool, bool)"/> 
    923987        public static IEnumerable<T> Update<T>( 
    924988            this ICommonDbTransaction transaction, 
     
    926990            bool throwOnUnexpectedAffectedRows, 
    927991            bool useInstanceType) 
     992        { 
     993            return Update(transaction, beans, throwOnUnexpectedAffectedRows, useInstanceType, false); 
     994        } 
     995 
     996        /// <summary> 
     997        /// <see cref="DbTableAttribute"/> 属性の設定されたビーンのプライマリキーの値を条件に 
     998        /// <c>UPDATE</c> を実行します。 
     999        /// </summary> 
     1000        /// <typeparam name="T"> 
     1001        /// <paramref name="beans"/> パラメータの要素の型。 
     1002        /// </typeparam> 
     1003        /// <param name="transaction"> 
     1004        /// トランザクション。 
     1005        /// </param> 
     1006        /// <param name="beans"> 
     1007        /// <see cref="DbTableAttribute"/> 属性の設定されたクラスのインスタンスの列挙子。 
     1008        /// </param> 
     1009        /// <param name="throwOnUnexpectedAffectedRows"> 
     1010        /// 更新結果が 1 ではない場合に 
     1011        /// <see cref="UnexpectedAffectedRowsException"/> をスローする場合は <see langword="true"/>。 
     1012        /// それ以外の場合は <see langword="false"/>。 
     1013        /// </param> 
     1014        /// <param name="useInstanceType"> 
     1015        /// ビーンのインスタンスの型からビーン情報を取得する場合は <see langword="true"/>。 
     1016        /// <typeparamref name="T"/> からビーン情報を取得する場合は <see langword="false"/>。 
     1017        /// </param> 
     1018        /// <param name="holdLock"> 
     1019        /// 更新対象が無かった場合でもロックを維持する場合は <see langword="true"/>。 
     1020        /// それ以外の場合は <see langword="false"/>。 
     1021        /// </param> 
     1022        /// <returns> 
     1023        /// <paramref name="beans"/> のうち更新されたインスタンスのみの列挙子。 
     1024        /// </returns> 
     1025        /// <exception cref="ArgumentNullException"> 
     1026        /// <paramref name="beans"/> が <see langword="null"/> 参照です。 
     1027        /// </exception> 
     1028        /// <exception cref="InvalidOperationException"> 
     1029        /// データの更新が許可されていないビーンです。 
     1030        /// </exception> 
     1031        /// <exception cref="ArgumentException"> 
     1032        /// <paramref name="beans"/> のクラス要素のに<see cref="DbTableAttribute"/> 属性が設定されていないか、 
     1033        /// <see cref="DbFieldAttribute"/> 属性を持つプロパティが無いか、 
     1034        /// プライマリキーの指定があるプロパティの値が不正か、 
     1035        /// または、値の設定されたフィールドが存在しません。 
     1036        /// </exception> 
     1037        /// <exception cref="UnexpectedAffectedRowsException"> 
     1038        /// ビーンのいずれかの更新件数が 1 ではありません。 
     1039        /// </exception> 
     1040        /// <remarks> 
     1041        /// プライマリキーに指定されているフィールドは更新できません。 
     1042        /// </remarks> 
     1043        /// <see cref="DbDataOperator.Update{T}(ICommonDbTransaction, T, bool, bool, bool)"/> 
     1044        public static IEnumerable<T> Update<T>( 
     1045            this ICommonDbTransaction transaction, 
     1046            IEnumerable<T> beans, 
     1047            bool throwOnUnexpectedAffectedRows, 
     1048            bool useInstanceType, 
     1049            bool holdLock) 
    9281050        { 
    9291051            // 引数をチェック 
     
    9421064                } 
    9431065 
    944                 if (DbDataOperator.Update(transaction, bean, throwOnUnexpectedAffectedRows, useInstanceType) == 0) 
     1066                if (DbDataOperator.Update(transaction, bean, throwOnUnexpectedAffectedRows, useInstanceType, holdLock) == 0) 
    9451067                { 
    9461068                    continue; 
     
    10481170        /// <summary> 
    10491171        /// <see cref="DbTableAttribute"/> 属性の設定されたビーンのプライマリキーの値を条件に 
    1050         /// <c>DELETE</c> を実行します。 
     1172        /// <c>UPDATE</c> を実行し、更新対象が無かった場合に <c>INSERT</c> します。 
    10511173        /// </summary> 
    10521174        /// <typeparam name="T"> 
     
    10661188        /// </exception> 
    10671189        /// <exception cref="InvalidOperationException"> 
    1068         /// データの削除が許可されていないビーンです。 
    1069         /// </exception> 
    1070         /// <exception cref="ArgumentException"> 
    1071         /// <paramref name="bean"/> のクラスに<see cref="DbTableAttribute"/> 属性が設定されていなかったり、 
    1072         /// <see cref="DbFieldAttribute"/> 属性を持つプロパティが無いか、 
    1073         /// プライマリキーの指定があるプロパティの値が不正です。 
    1074         /// </exception> 
    1075         /// <exception cref="UnexpectedAffectedRowsException"> 
    1076         /// 削除件数が 1 ではありません。 
    1077         /// </exception> 
    1078         /// <see cref="DbDataOperator.Delete{T}(ICommonDbTransaction, T)"/> 
    1079         public static T Delete<T>( 
     1190        /// データの更新が許可されていないビーンです。 
     1191        /// </exception> 
     1192        /// <exception cref="ArgumentException"> 
     1193        /// <paramref name="bean"/> のクラスに<see cref="DbTableAttribute"/> 属性が設定されていないか、 
     1194        /// <see cref="DbFieldAttribute"/> 属性を持つプロパティが無いか、 
     1195        /// プライマリキーの指定があるプロパティの値が不正か、 
     1196        /// または、値の設定されたフィールドが存在しません。 
     1197        /// </exception> 
     1198        /// <exception cref="MissingDataException"> 
     1199        /// 自動採番の値が取得できません。 
     1200        /// </exception> 
     1201        /// <exception cref="SilverFrostException"> 
     1202        /// フィールドの状態が正しくありません。 
     1203        /// </exception> 
     1204        /// <remarks> 
     1205        /// プライマリキーに指定されているフィールドは更新できません。 
     1206        /// </remarks> 
     1207        /// <see cref="DbDataOperator.Save{T}(ICommonDbTransaction, T)"/> 
     1208        public static T Save<T>( 
    10801209            this ICommonDbTransaction transaction, 
    10811210            T bean) 
    10821211        { 
    1083             DbDataOperator.Delete(transaction, bean); 
     1212            DbDataOperator.Save(transaction, bean); 
    10841213            return bean; 
    10851214        } 
     
    10871216        /// <summary> 
    10881217        /// <see cref="DbTableAttribute"/> 属性の設定されたビーンのプライマリキーの値を条件に 
    1089         /// <c>DELETE</c> を実行します。 
     1218        /// <c>UPDATE</c> を実行し、更新対象が無かった場合に <c>INSERT</c> します。 
    10901219        /// </summary> 
    10911220        /// <typeparam name="T"> 
     
    10971226        /// <param name="bean"> 
    10981227        /// <see cref="DbTableAttribute"/> 属性の設定されたクラスのインスタンス。 
    1099         /// </param> 
    1100         /// <param name="throwOnUnexpectedAffectedRows"> 
    1101         /// 削除結果が 1 ではない場合に 
    1102         /// <see cref="UnexpectedAffectedRowsException"/> をスローする場合は <see langword="true"/>。 
    1103         /// それ以外の場合は <see langword="false"/>。 
    1104         /// </param> 
    1105         /// <returns> 
    1106         /// 削除された場合は <paramref name="bean"/> に指定されたインスタンス。 
    1107         /// それ以外の場合は <see langword="null"/> 参照です。 
    1108         /// </returns> 
    1109         /// <exception cref="ArgumentNullException"> 
    1110         /// <paramref name="bean"/> が <see langword="null"/> 参照です。 
    1111         /// </exception> 
    1112         /// <exception cref="InvalidOperationException"> 
    1113         /// データの削除が許可されていないビーンです。 
    1114         /// </exception> 
    1115         /// <exception cref="ArgumentException"> 
    1116         /// <paramref name="bean"/> のクラスに<see cref="DbTableAttribute"/> 属性が設定されていなかったり、 
    1117         /// <see cref="DbFieldAttribute"/> 属性を持つプロパティが無いか、 
    1118         /// プライマリキーの指定があるプロパティの値が不正です。 
    1119         /// </exception> 
    1120         /// <exception cref="UnexpectedAffectedRowsException"> 
    1121         /// 削除件数が 1 ではありません。 
    1122         /// </exception> 
    1123         /// <see cref="DbDataOperator.Delete{T}(ICommonDbTransaction, T, bool)"/> 
    1124         public static T Delete<T>( 
    1125             this ICommonDbTransaction transaction, 
    1126             T bean, 
    1127             bool throwOnUnexpectedAffectedRows) 
    1128         { 
    1129             return DbDataOperator.Delete(transaction, bean, throwOnUnexpectedAffectedRows) == 1 
    1130                 ? bean 
    1131                 : default(T); 
    1132         } 
    1133  
    1134         /// <summary> 
    1135         /// <see cref="DbTableAttribute"/> 属性の設定されたビーンのプライマリキーの値を条件に 
    1136         /// <c>DELETE</c> を実行します。 
    1137         /// </summary> 
    1138         /// <typeparam name="T"> 
    1139         /// <paramref name="bean"/> パラメータの型。 
    1140         /// </typeparam> 
    1141         /// <param name="transaction"> 
    1142         /// トランザクション。 
    1143         /// </param> 
    1144         /// <param name="bean"> 
    1145         /// <see cref="DbTableAttribute"/> 属性の設定されたクラスのインスタンス。 
    1146         /// </param> 
    1147         /// <param name="throwOnUnexpectedAffectedRows"> 
    1148         /// 削除結果が 1 ではない場合に 
    1149         /// <see cref="UnexpectedAffectedRowsException"/> をスローする場合は <see langword="true"/>。 
    1150         /// それ以外の場合は <see langword="false"/>。 
    11511228        /// </param> 
    11521229        /// <param name="useInstanceType"> 
     
    11551232        /// </param> 
    11561233        /// <returns> 
    1157         /// 削除された場合は <paramref name="bean"/> に指定されたインスタンス。 
     1234        /// 更新された場合は <paramref name="bean"/> に指定されたインスタンス。 
    11581235        /// それ以外の場合は <see langword="null"/> 参照です。 
    11591236        /// </returns> 
     
    11621239        /// </exception> 
    11631240        /// <exception cref="InvalidOperationException"> 
    1164         /// データの削除が許可されていないビーンです。 
    1165         /// </exception> 
    1166         /// <exception cref="ArgumentException"> 
    1167         /// <paramref name="bean"/> のクラスに<see cref="DbTableAttribute"/> 属性が設定されていなかったり、 
    1168         /// <see cref="DbFieldAttribute"/> 属性を持つプロパティが無いか、 
    1169         /// プライマリキーの指定があるプロパティの値が不正です。 
    1170         /// </exception> 
    1171         /// <exception cref="UnexpectedAffectedRowsException"> 
    1172         /// 削除件数が 1 ではありません。 
    1173         /// </exception> 
    1174         /// <see cref="DbDataOperator.Delete{T}(ICommonDbTransaction, T, bool)"/> 
    1175         public static T Delete<T>( 
     1241        /// データの更新が許可されていないビーンです。 
     1242        /// </exception> 
     1243        /// <exception cref="ArgumentException"> 
     1244        /// <paramref name="bean"/> のクラスに<see cref="DbTableAttribute"/> 属性が設定されていないか、 
     1245        /// <see cref="DbFieldAttribute"/> 属性を持つプロパティが無いか、 
     1246        /// プライマリキーの指定があるプロパティの値が不正か、 
     1247        /// または、値の設定されたフィールドが存在しません。 
     1248        /// </exception> 
     1249        /// <exception cref="MissingDataException"> 
     1250        /// 自動採番の値が取得できません。 
     1251        /// </exception> 
     1252        /// <exception cref="SilverFrostException"> 
     1253        /// フィールドの状態が正しくありません。 
     1254        /// </exception> 
     1255        /// <remarks> 
     1256        /// プライマリキーに指定されているフィールドは更新できません。 
     1257        /// </remarks> 
     1258        /// <see cref="DbDataOperator.Save{T}(ICommonDbTransaction, T, bool)"/> 
     1259        public static T Save<T>( 
    11761260            this ICommonDbTransaction transaction, 
    11771261            T bean, 
    1178             bool throwOnUnexpectedAffectedRows, 
    11791262            bool useInstanceType) 
    11801263        { 
    1181             return DbDataOperator.Delete(transaction, bean, throwOnUnexpectedAffectedRows, useInstanceType) == 1 
    1182                 ? bean 
    1183                 : default(T); 
    1184         } 
    1185  
    1186         /// <summary> 
    1187         /// <see cref="DbTableAttribute"/> 属性の設定されたビーンのプライマリキーの値を条件に 
    1188         /// <c>DELETE</c> を実行します。 
    1189         /// </summary> 
     1264            DbDataOperator.Save(transaction, bean, useInstanceType); 
     1265            return bean; 
     1266        } 
     1267 
     1268        /// <summary> 
     1269        /// <see cref="DbTableAttribute"/> 属性の設定されたビーンのプライマリキーの値を条件に 
     1270        /// <c>UPDATE</c> を実行し、更新対象が無かった場合に <c>INSERT</c> します。 
     1271        /// </summary> 
     1272        /// <typeparam name="T"> 
     1273        /// <paramref name="bean"/> パラメータの型。 
     1274        /// </typeparam> 
     1275        /// <param name="transaction"> 
     1276        /// トランザクション。 
     1277        /// </param> 
     1278        /// <param name="bean"> 
     1279        /// <see cref="DbTableAttribute"/> 属性の設定されたクラスのインスタンス。 
     1280        /// </param> 
     1281        /// <param name="useInstanceType"> 
     1282        /// ビーンのインスタンスの型からビーン情報を取得する場合は <see langword="true"/>。 
     1283        /// <typeparamref name="T"/> からビーン情報を取得する場合は <see langword="false"/>。 
     1284        /// </param> 
     1285        /// <param name="holdLock"> 
     1286        /// 更新対象が無かった場合でもロックを維持する場合は <see langword="true"/>。 
     1287        /// それ以外の場合は <see langword="false"/>。 
     1288        /// </param> 
     1289        /// <returns> 
     1290        /// 更新された場合は <paramref name="bean"/> に指定されたインスタンス。 
     1291        /// それ以外の場合は <see langword="null"/> 参照です。 
     1292        /// </returns> 
     1293        /// <exception cref="ArgumentNullException"> 
     1294        /// <paramref name="bean"/> が <see langword="null"/> 参照です。 
     1295        /// </exception> 
     1296        /// <exception cref="InvalidOperationException"> 
     1297        /// データの更新が許可されていないビーンです。 
     1298        /// </exception> 
     1299        /// <exception cref="ArgumentException"> 
     1300        /// <paramref name="bean"/> のクラスに<see cref="DbTableAttribute"/> 属性が設定されていないか、 
     1301        /// <see cref="DbFieldAttribute"/> 属性を持つプロパティが無いか、 
     1302        /// プライマリキーの指定があるプロパティの値が不正か、 
     1303        /// または、値の設定されたフィールドが存在しません。 
     1304        /// </exception> 
     1305        /// <exception cref="MissingDataException"> 
     1306        /// 自動採番の値が取得できません。 
     1307        /// </exception> 
     1308        /// <exception cref="SilverFrostException"> 
     1309        /// フィールドの状態が正しくありません。 
     1310        /// </exception> 
     1311        /// <remarks> 
     1312        /// プライマリキーに指定されているフィールドは更新できません。 
     1313        /// </remarks> 
     1314        /// <see cref="DbDataOperator.Save{T}(ICommonDbTransaction, T, bool, bool)"/> 
     1315        public static T Save<T>( 
     1316            this ICommonDbTransaction transaction, 
     1317            T bean, 
     1318            bool useInstanceType, 
     1319            bool holdLock) 
     1320        { 
     1321            DbDataOperator.Save(transaction, bean, useInstanceType, holdLock); 
     1322            return bean; 
     1323        } 
     1324 
     1325        /// <summary> 
     1326        /// <see cref="DbTableAttribute"/> 属性の設定されたビーンのプライマリキーの値を条件に 
     1327        /// <c>UPDATE</c> を実行し、更新対象が無かった場合に <c>INSERT</c> します。 
     1328        /// </summary> 
     1329        /// <typeparam name="TEnumerable"> 
     1330        /// <typeparamref name="T"/> の列挙子の型。 
     1331        /// </typeparam> 
    11901332        /// <typeparam name="T"> 
    11911333        /// <paramref name="beans"/> パラメータの要素の型。 
     
    11981340        /// </param> 
    11991341        /// <returns> 
    1200         /// <paramref name="beans"/> のうち削除されたインスタンスのみの列挙子。 
     1342        /// <paramref name="beans"/> のうち更新されたインスタンスのみの列挙子。 
    12011343        /// </returns> 
    12021344        /// <exception cref="ArgumentNullException"> 
     
    12041346        /// </exception> 
    12051347        /// <exception cref="InvalidOperationException"> 
    1206         /// データの削除が許可されていないビーンです。 
    1207         /// </exception> 
    1208         /// <exception cref="ArgumentException"> 
    1209         /// <paramref name="beans"/> の要素のクラスに<see cref="DbTableAttribute"/> 属性が設定されていなかったり、 
    1210         /// <see cref="DbFieldAttribute"/> 属性を持つプロパティが無いか、 
    1211         /// プライマリキーの指定があるプロパティの値が不正です。 
    1212         /// </exception> 
    1213         /// <exception cref="UnexpectedAffectedRowsException"> 
    1214         /// ビーンのいずれかの削除件数が 1 ではありません。 
    1215         /// </exception> 
    1216         /// <see cref="DbDataOperator.Delete{T}(ICommonDbTransaction, T)"/> 
    1217         public static IEnumerable<T> Delete<T>( 
    1218             this ICommonDbTransaction transaction, 
    1219             IEnumerable<T> beans) 
     1348        /// データの更新が許可されていないビーンです。 
     1349        /// </exception> 
     1350        /// <exception cref="ArgumentException"> 
     1351        /// <paramref name="beans"/> の要素のクラスに<see cref="DbTableAttribute"/> 属性が設定されていないか、 
     1352        /// <see cref="DbFieldAttribute"/> 属性を持つプロパティが無いか、 
     1353        /// プライマリキーの指定があるプロパティの値が不正か、 
     1354        /// または、値の設定されたフィールドが存在しません。 
     1355        /// </exception> 
     1356        /// <exception cref="MissingDataException"> 
     1357        /// 自動採番の値が取得できません。 
     1358        /// </exception> 
     1359        /// <exception cref="SilverFrostException"> 
     1360        /// フィールドの状態が正しくありません。 
     1361        /// </exception> 
     1362        /// <remarks> 
     1363        /// プライマリキーに指定されているフィールドは更新できません。 
     1364        /// </remarks> 
     1365        /// <see cref="DbDataOperator.Save{T}(ICommonDbTransaction, T)"/> 
     1366        public static TEnumerable Save<TEnumerable, T>( 
     1367            this ICommonDbTransaction transaction, 
     1368            TEnumerable beans) 
     1369            where TEnumerable : IEnumerable<T> 
     1370        { 
     1371            return Save(transaction, beans, false); 
     1372        } 
     1373 
     1374        /// <summary> 
     1375        /// <see cref="DbTableAttribute"/> 属性の設定されたビーンのプライマリキーの値を条件に 
     1376        /// <c>UPDATE</c> を実行し、更新対象が無かった場合に <c>INSERT</c> します。 
     1377        /// </summary> 
     1378        /// <typeparam name="TEnumerable"> 
     1379        /// <typeparamref name="T"/> の列挙子の型。 
     1380        /// </typeparam> 
     1381        /// <typeparam name="T"> 
     1382        /// <paramref name="beans"/> パラメータの要素の型。 
     1383        /// </typeparam> 
     1384        /// <param name="transaction"> 
     1385        /// トランザクション。 
     1386        /// </param> 
     1387        /// <param name="beans"> 
     1388        /// <see cref="DbTableAttribute"/> 属性の設定されたクラスのインスタンスの列挙子。 
     1389        /// </param> 
     1390        /// <param name="useInstanceType"> 
     1391        /// ビーンのインスタンスの型からビーン情報を取得する場合は <see langword="true"/>。 
     1392        /// <typeparamref name="T"/> からビーン情報を取得する場合は <see langword="false"/>。 
     1393        /// </param> 
     1394        /// <returns> 
     1395        /// <paramref name="beans"/> のうち更新されたインスタンスのみの列挙子。 
     1396        /// </returns> 
     1397        /// <exception cref="ArgumentNullException"> 
     1398        /// <paramref name="beans"/> が <see langword="null"/> 参照です。 
     1399        /// </exception> 
     1400        /// <exception cref="InvalidOperationException"> 
     1401        /// データの更新が許可されていないビーンです。 
     1402        /// </exception> 
     1403        /// <exception cref="ArgumentException"> 
     1404        /// <paramref name="beans"/> のクラス要素のに<see cref="DbTableAttribute"/> 属性が設定されていないか、 
     1405        /// <see cref="DbFieldAttribute"/> 属性を持つプロパティが無いか、 
     1406        /// プライマリキーの指定があるプロパティの値が不正か、 
     1407        /// または、値の設定されたフィールドが存在しません。 
     1408        /// </exception> 
     1409        /// <exception cref="MissingDataException"> 
     1410        /// 自動採番の値が取得できません。 
     1411        /// </exception> 
     1412        /// <exception cref="SilverFrostException"> 
     1413        /// フィールドの状態が正しくありません。 
     1414        /// </exception> 
     1415        /// <remarks> 
     1416        /// プライマリキーに指定されているフィールドは更新できません。 
     1417        /// </remarks> 
     1418        /// <see cref="DbDataOperator.Save{T}(ICommonDbTransaction, T, bool)"/> 
     1419        public static TEnumerable Save<TEnumerable, T>( 
     1420            this ICommonDbTransaction transaction, 
     1421            TEnumerable beans, 
     1422            bool useInstanceType) 
     1423            where TEnumerable : IEnumerable<T> 
     1424        { 
     1425            return Save(transaction, beans, useInstanceType, false); 
     1426        } 
     1427 
     1428        /// <summary> 
     1429        /// <see cref="DbTableAttribute"/> 属性の設定されたビーンのプライマリキーの値を条件に 
     1430        /// <c>UPDATE</c> を実行し、更新対象が無かった場合に <c>INSERT</c> します。 
     1431        /// </summary> 
     1432        /// <typeparam name="TEnumerable"> 
     1433        /// <typeparamref name="T"/> の列挙子の型。 
     1434        /// </typeparam> 
     1435        /// <typeparam name="T"> 
     1436        /// <paramref name="beans"/> パラメータの要素の型。 
     1437        /// </typeparam> 
     1438        /// <param name="transaction"> 
     1439        /// トランザクション。 
     1440        /// </param> 
     1441        /// <param name="beans"> 
     1442        /// <see cref="DbTableAttribute"/> 属性の設定されたクラスのインスタンスの列挙子。 
     1443        /// </param> 
     1444        /// <param name="useInstanceType"> 
     1445        /// ビーンのインスタンスの型からビーン情報を取得する場合は <see langword="true"/>。 
     1446        /// <typeparamref name="T"/> からビーン情報を取得する場合は <see langword="false"/>。 
     1447        /// </param> 
     1448        /// <param name="holdLock"> 
     1449        /// <c>UPDATE</c> を実行時に、更新対象が無かった場合でもロックを維持する場合は <see langword="true"/>。 
     1450        /// それ以外の場合は <see langword="false"/>。 
     1451        /// </param> 
     1452        /// <returns> 
     1453        /// <paramref name="beans"/> のうち更新されたインスタンスのみの列挙子。 
     1454        /// </returns> 
     1455        /// <exception cref="ArgumentNullException"> 
     1456        /// <paramref name="beans"/> が <see langword="null"/> 参照です。 
     1457        /// </exception> 
     1458        /// <exception cref="InvalidOperationException"> 
     1459        /// データの更新が許可されていないビーンです。 
     1460        /// </exception> 
     1461        /// <exception cref="ArgumentException"> 
     1462        /// <paramref name="beans"/> のクラス要素のに<see cref="DbTableAttribute"/> 属性が設定されていないか、 
     1463        /// <see cref="DbFieldAttribute"/> 属性を持つプロパティが無いか、 
     1464        /// プライマリキーの指定があるプロパティの値が不正か、 
     1465        /// または、値の設定されたフィールドが存在しません。 
     1466        /// </exception> 
     1467        /// <exception cref="MissingDataException"> 
     1468        /// 自動採番の値が取得できません。 
     1469        /// </exception> 
     1470        /// <exception cref="SilverFrostException"> 
     1471        /// フィールドの状態が正しくありません。 
     1472        /// </exception> 
     1473        /// <remarks> 
     1474        /// プライマリキーに指定されているフィールドは更新できません。 
     1475        /// </remarks> 
     1476        /// <see cref="DbDataOperator.Save{T}(ICommonDbTransaction, T, bool, bool)"/> 
     1477        public static TEnumerable Save<TEnumerable, T>( 
     1478            this ICommonDbTransaction transaction, 
     1479            TEnumerable beans, 
     1480            bool useInstanceType, 
     1481            bool holdLock) 
     1482            where TEnumerable : IEnumerable<T> 
    12201483        { 
    12211484            // 引数をチェック 
     
    12241487                throw new ArgumentNullException("beans"); 
    12251488            } 
    1226  
    1227             IList<T> results = new List<T>(); 
    12281489 
    12291490            foreach (T bean in beans) 
     
    12341495                } 
    12351496 
    1236                 DbDataOperator.Delete(transaction, bean); 
    1237                 results.Add(bean); 
     1497                DbDataOperator.Save(transaction, bean, useInstanceType, holdLock); 
    12381498            } 
    12391499 
    1240             return results; 
     1500            return beans; 
    12411501        } 
    12421502 
     
    12461506        /// </summary> 
    12471507        /// <typeparam name="T"> 
    1248         /// <paramref name="beans"/> パラメータの要素の型。 
    1249         /// </typeparam> 
    1250         /// <param name="transaction"> 
    1251         /// トランザクション。 
    1252         /// </param> 
    1253         /// <param name="beans"> 
    1254         /// <see cref="DbTableAttribute"/> 属性の設定されたクラスのインスタンスの列挙子。 
     1508        /// <paramref name="bean"/> パラメータの型。 
     1509        /// </typeparam> 
     1510        /// <param name="transaction"> 
     1511        /// トランザクション。 
     1512        /// </param> 
     1513        /// <param name="bean"> 
     1514        /// <see cref="DbTableAttribute"/> 属性の設定されたクラスのインスタンス。 
     1515        /// </param> 
     1516        /// <returns> 
     1517        /// <paramref name="bean"/> に指定されたインスタンス。 
     1518        /// </returns> 
     1519        /// <exception cref="ArgumentNullException"> 
     1520        /// <paramref name="bean"/> が <see langword="null"/> 参照です。 
     1521        /// </exception> 
     1522        /// <exception cref="InvalidOperationException"> 
     1523        /// データの削除が許可されていないビーンです。 
     1524        /// </exception> 
     1525        /// <exception cref="ArgumentException"> 
     1526        /// <paramref name="bean"/> のクラスに<see cref="DbTableAttribute"/> 属性が設定されていなかったり、 
     1527        /// <see cref="DbFieldAttribute"/> 属性を持つプロパティが無いか、 
     1528        /// プライマリキーの指定があるプロパティの値が不正です。 
     1529        /// </exception> 
     1530        /// <exception cref="UnexpectedAffectedRowsException"> 
     1531        /// 削除件数が 1 ではありません。 
     1532        /// </exception> 
     1533        /// <see cref="DbDataOperator.Delete{T}(ICommonDbTransaction, T)"/> 
     1534        public static T Delete<T>( 
     1535            this ICommonDbTransaction transaction, 
     1536            T bean) 
     1537        { 
     1538            DbDataOperator.Delete(transaction, bean); 
     1539            return bean; 
     1540        } 
     1541 
     1542        /// <summary> 
     1543        /// <see cref="DbTableAttribute"/> 属性の設定されたビーンのプライマリキーの値を条件に 
     1544        /// <c>DELETE</c> を実行します。 
     1545        /// </summary> 
     1546        /// <typeparam name="T"> 
     1547        /// <paramref name="bean"/> パラメータの型。 
     1548        /// </typeparam> 
     1549        /// <param name="transaction"> 
     1550        /// トランザクション。 
     1551        /// </param> 
     1552        /// <param name="bean"> 
     1553        /// <see cref="DbTableAttribute"/> 属性の設定されたクラスのインスタンス。 
    12551554        /// </param> 
    12561555        /// <param name="throwOnUnexpectedAffectedRows"> 
     
    12601559        /// </param> 
    12611560        /// <returns> 
    1262         /// <paramref name="beans"/> のうち削除されたインスタンスのみの列挙子。 
    1263         /// </returns> 
    1264         /// <exception cref="ArgumentNullException"> 
    1265         /// <paramref name="beans"/> が <see langword="null"/> 参照です。 
     1561        /// 削除された場合は <paramref name="bean"/> に指定されたインスタンス。 
     1562        /// それ以外の場合は <see langword="null"/> 参照です。 
     1563        /// </returns> 
     1564        /// <exception cref="ArgumentNullException"> 
     1565        /// <paramref name="bean"/> が <see langword="null"/> 参照です。 
    12661566        /// </exception> 
    12671567        /// <exception cref="InvalidOperationException"> 
     
    12691569        /// </exception> 
    12701570        /// <exception cref="ArgumentException"> 
    1271         /// <paramref name="beans"/> の要素のクラスに<see cref="DbTableAttribute"/> 属性が設定されていなかったり、 
     1571        /// <paramref name="bean"/> のクラスに<see cref="DbTableAttribute"/> 属性が設定されていなかったり、 
    12721572        /// <see cref="DbFieldAttribute"/> 属性を持つプロパティが無いか、 
    12731573        /// プライマリキーの指定があるプロパティの値が不正です。 
    12741574        /// </exception> 
    12751575        /// <exception cref="UnexpectedAffectedRowsException"> 
    1276         /// ビーンのいずれかの削除件数が 1 ではありません。 
     1576        /// 削除件数が 1 ではありません。 
    12771577        /// </exception> 
    12781578        /// <see cref="DbDataOperator.Delete{T}(ICommonDbTransaction, T, bool)"/> 
    1279         public static IEnumerable<T> Delete<T>( 
    1280             this ICommonDbTransaction transaction, 
    1281             IEnumerable<T> beans, 
     1579        public static T Delete<T>( 
     1580            this ICommonDbTransaction transaction, 
     1581            T bean, 
    12821582            bool throwOnUnexpectedAffectedRows) 
    12831583        { 
    1284             return Delete(transaction, beans, throwOnUnexpectedAffectedRows, false); 
     1584            return DbDataOperator.Delete(transaction, bean, throwOnUnexpectedAffectedRows) == 1 
     1585                ? bean 
     1586                : default(T); 
    12851587        } 
    12861588 
     
    12901592        /// </summary> 
    12911593        /// <typeparam name="T"> 
    1292         /// <paramref name="beans"/> パラメータの要素の型。 
    1293         /// </typeparam> 
    1294         /// <param name="transaction"> 
    1295         /// トランザクション。 
    1296         /// </param> 
    1297         /// <param name="beans"> 
    1298         /// <see cref="DbTableAttribute"/> 属性の設定されたクラスのインスタンスの列挙子 
     1594        /// <paramref name="bean"/> パラメータの型。 
     1595        /// </typeparam> 
     1596        /// <param name="transaction"> 
     1597        /// トランザクション。 
     1598        /// </param> 
     1599        /// <param name="bean"> 
     1600        /// <see cref="DbTableAttribute"/> 属性の設定されたクラスのインスタンス 
    12991601        /// </param> 
    13001602        /// <param name="throwOnUnexpectedAffectedRows"> 
     
    13081610        /// </param> 
    13091611        /// <returns> 
     1612        /// 削除された場合は <paramref name="bean"/> に指定されたインスタンス。 
     1613        /// それ以外の場合は <see langword="null"/> 参照です。 
     1614        /// </returns> 
     1615        /// <exception cref="ArgumentNullException"> 
     1616        /// <paramref name="bean"/> が <see langword="null"/> 参照です。 
     1617        /// </exception> 
     1618        /// <exception cref="InvalidOperationException"> 
     1619        /// データの削除が許可されていないビーンです。 
     1620        /// </exception> 
     1621        /// <exception cref="ArgumentException"> 
     1622        /// <paramref name="bean"/> のクラスに<see cref="DbTableAttribute"/> 属性が設定されていなかったり、 
     1623        /// <see cref="DbFieldAttribute"/> 属性を持つプロパティが無いか、 
     1624        /// プライマリキーの指定があるプロパティの値が不正です。 
     1625        /// </exception> 
     1626        /// <exception cref="UnexpectedAffectedRowsException"> 
     1627        /// 削除件数が 1 ではありません。 
     1628        /// </exception> 
     1629        /// <see cref="DbDataOperator.Delete{T}(ICommonDbTransaction, T, bool, bool)"/> 
     1630        public static T Delete<T>( 
     1631            this ICommonDbTransaction transaction, 
     1632            T bean, 
     1633            bool throwOnUnexpectedAffectedRows, 
     1634            bool useInstanceType) 
     1635        { 
     1636            return DbDataOperator.Delete(transaction, bean, throwOnUnexpectedAffectedRows, useInstanceType) == 1 
     1637                ? bean 
     1638                : default(T); 
     1639        } 
     1640 
     1641        /// <summary> 
     1642        /// <see cref="DbTableAttribute"/> 属性の設定されたビーンのプライマリキーの値を条件に 
     1643        /// <c>DELETE</c> を実行します。 
     1644        /// </summary> 
     1645        /// <typeparam name="T"> 
     1646        /// <paramref name="beans"/> パラメータの要素の型。 
     1647        /// </typeparam> 
     1648        /// <param name="transaction"> 
     1649        /// トランザクション。 
     1650        /// </param> 
     1651        /// <param name="beans"> 
     1652        /// <see cref="DbTableAttribute"/> 属性の設定されたクラスのインスタンスの列挙子。 
     1653        /// </param> 
     1654        /// <returns> 
    13101655        /// <paramref name="beans"/> のうち削除されたインスタンスのみの列挙子。 
    13111656        /// </returns> 
     
    13241669        /// ビーンのいずれかの削除件数が 1 ではありません。 
    13251670        /// </exception> 
    1326         /// <see cref="DbDataOperator.Delete{T}(ICommonDbTransaction, T, bool)"/> 
     1671        /// <see cref="DbDataOperator.Delete{T}(ICommonDbTransaction, T)"/> 
    13271672        public static IEnumerable<T> Delete<T>( 
    13281673            this ICommonDbTransaction transaction, 
    1329             IEnumerable<T> beans, 
    1330             bool throwOnUnexpectedAffectedRows, 
    1331             bool useInstanceType) 
     1674            IEnumerable<T> beans) 
    13321675        { 
    13331676            // 引数をチェック 
     
    13461689                } 
    13471690 
     1691                DbDataOperator.Delete(transaction, bean); 
     1692                results.Add(bean); 
     1693            } 
     1694 
     1695            return results; 
     1696        } 
     1697 
     1698        /// <summary> 
     1699        /// <see cref="DbTableAttribute"/> 属性の設定されたビーンのプライマリキーの値を条件に 
     1700        /// <c>DELETE</c> を実行します。 
     1701        /// </summary> 
     1702        /// <typeparam name="T"> 
     1703        /// <paramref name="beans"/> パラメータの要素の型。 
     1704        /// </typeparam> 
     1705        /// <param name="transaction"> 
     1706        /// トランザクション。 
     1707        /// </param> 
     1708        /// <param name="beans"> 
     1709        /// <see cref="DbTableAttribute"/> 属性の設定されたクラスのインスタンスの列挙子。 
     1710        /// </param> 
     1711        /// <param name="throwOnUnexpectedAffectedRows"> 
     1712        /// 削除結果が 1 ではない場合に 
     1713        /// <see cref="UnexpectedAffectedRowsException"/> をスローする場合は <see langword="true"/>。 
     1714        /// それ以外の場合は <see langword="false"/>。 
     1715        /// </param> 
     1716        /// <returns> 
     1717        /// <paramref name="beans"/> のうち削除されたインスタンスのみの列挙子。 
     1718        /// </returns> 
     1719        /// <exception cref="ArgumentNullException"> 
     1720        /// <paramref name="beans"/> が <see langword="null"/> 参照です。 
     1721        /// </exception> 
     1722        /// <exception cref="InvalidOperationException"> 
     1723        /// データの削除が許可されていないビーンです。 
     1724        /// </exception> 
     1725        /// <exception cref="ArgumentException"> 
     1726        /// <paramref name="beans"/> の要素のクラスに<see cref="DbTableAttribute"/> 属性が設定されていなかったり、 
     1727        /// <see cref="DbFieldAttribute"/> 属性を持つプロパティが無いか、 
     1728        /// プライマリキーの指定があるプロパティの値が不正です。 
     1729        /// </exception> 
     1730        /// <exception cref="UnexpectedAffectedRowsException"> 
     1731        /// ビーンのいずれかの削除件数が 1 ではありません。 
     1732        /// </exception> 
     1733        /// <see cref="DbDataOperator.Delete{T}(ICommonDbTransaction, T, bool)"/> 
     1734        public static IEnumerable<T> Delete<T>( 
     1735            this ICommonDbTransaction transaction, 
     1736            IEnumerable<T> beans, 
     1737            bool throwOnUnexpectedAffectedRows) 
     1738        { 
     1739            return Delete(transaction, beans, throwOnUnexpectedAffectedRows, false); 
     1740        } 
     1741 
     1742        /// <summary> 
     1743        /// <see cref="DbTableAttribute"/> 属性の設定されたビーンのプライマリキーの値を条件に 
     1744        /// <c>DELETE</c> を実行します。 
     1745        /// </summary> 
     1746        /// <typeparam name="T"> 
     1747        /// <paramref name="beans"/> パラメータの要素の型。 
     1748        /// </typeparam> 
     1749        /// <param name="transaction"> 
     1750        /// トランザクション。 
     1751        /// </param> 
     1752        /// <param name="beans"> 
     1753        /// <see cref="DbTableAttribute"/> 属性の設定されたクラスのインスタンスの列挙子。 
     1754        /// </param> 
     1755        /// <param name="throwOnUnexpectedAffectedRows"> 
     1756        /// 削除結果が 1 ではない場合に 
     1757        /// <see cref="UnexpectedAffectedRowsException"/> をスローする場合は <see langword="true"/>。 
     1758        /// それ以外の場合は <see langword="false"/>。 
     1759        /// </param> 
     1760        /// <param name="useInstanceType"> 
     1761        /// ビーンのインスタンスの型からビーン情報を取得する場合は <see langword="true"/>。 
     1762        /// <typeparamref name="T"/> からビーン情報を取得する場合は <see langword="false"/>。 
     1763        /// </param> 
     1764        /// <returns> 
     1765        /// <paramref name="beans"/> のうち削除されたインスタンスのみの列挙子。 
     1766        /// </returns> 
     1767        /// <exception cref="ArgumentNullException"> 
     1768        /// <paramref name="beans"/> が <see langword="null"/> 参照です。 
     1769        /// </exception> 
     1770        /// <exception cref="InvalidOperationException"> 
     1771        /// データの削除が許可されていないビーンです。 
     1772        /// </exception> 
     1773        /// <exception cref="ArgumentException"> 
     1774        /// <paramref name="beans"/> の要素のクラスに<see cref="DbTableAttribute"/> 属性が設定されていなかったり、 
     1775        /// <see cref="DbFieldAttribute"/> 属性を持つプロパティが無いか、 
     1776        /// プライマリキーの指定があるプロパティの値が不正です。 
     1777        /// </exception> 
     1778        /// <exception cref="UnexpectedAffectedRowsException"> 
     1779        /// ビーンのいずれかの削除件数が 1 ではありません。 
     1780        /// </exception> 
     1781        /// <see cref="DbDataOperator.Delete{T}(ICommonDbTransaction, T, bool, bool)"/> 
     1782        public static IEnumerable<T> Delete<T>( 
     1783            this ICommonDbTransaction transaction, 
     1784            IEnumerable<T> beans, 
     1785            bool throwOnUnexpectedAffectedRows, 
     1786            bool useInstanceType) 
     1787        { 
     1788            // 引数をチェック 
     1789            if (beans == null) 
     1790            { 
     1791                throw new ArgumentNullException("beans"); 
     1792            } 
     1793 
     1794            IList<T> results = new List<T>(); 
     1795 
     1796            foreach (T bean in beans) 
     1797            { 
     1798                if (Equals(bean, default(T))) 
     1799                { 
     1800                    continue; 
     1801                } 
     1802 
    13481803                if (DbDataOperator.Delete(transaction, bean, throwOnUnexpectedAffectedRows, useInstanceType) == 0) 
    13491804                { 
     
    13831838        /// <see cref="DbFieldAttribute"/> 属性を持つプロパティがありません。 
    13841839        /// </exception> 
     1840        /// <see cref="DbDataOperator.DeleteAll{T}(ICommonDbTransaction, T)"/> 
    13851841        public static int DeleteAll<T>( 
    13861842            this ICommonDbTransaction transaction, 
     
    14201876        /// <see cref="DbFieldAttribute"/> 属性を持つプロパティがありません。 
    14211877        /// </exception> 
     1878        /// <see cref="DbDataOperator.DeleteAll{T}(ICommonDbTransaction, T, bool)"/> 
    14221879        public static int DeleteAll<T>( 
    14231880            this ICommonDbTransaction transaction, 
  • framework/trunk/CoreLibrary/Sources/Data/DbDataOperator.cs

    r1648 r1650  
    805805            }; 
    806806 
     807            // FIXME InsertDefault が SQL Server 専用 
    807808            using (ICommonDbCommand command 
    808809                = transaction.CreateCommand( 
     
    908909            T bean) 
    909910        { 
    910             Update(transaction, bean, true, false); 
     911            Update(transaction, bean, true); 
    911912        } 
    912913 
     
    923924        /// </param> 
    924925        /// <param name="throwOnUnexpectedAffectedRows"> 
    925         /// 削除結果が 1 ではない場合に 
     926        /// 更新結果が 1 ではない場合に 
    926927        /// <see cref="UnexpectedAffectedRowsException"/> をスローする場合は <see langword="true"/>。 
    927928        /// それ以外の場合は <see langword="false"/>。 
    928929        /// </param> 
    929930        /// <returns> 
    930         /// 削除した件数。 
     931        /// 更新した件数。 
    931932        /// </returns> 
    932933        /// <exception cref="ArgumentNullException"> 
     
    969970        /// </param> 
    970971        /// <param name="throwOnUnexpectedAffectedRows"> 
    971         /// 削除結果が 1 ではない場合に 
     972        /// 更新結果が 1 ではない場合に 
    972973        /// <see cref="UnexpectedAffectedRowsException"/> をスローする場合は <see langword="true"/>。 
    973974        /// それ以外の場合は <see langword="false"/>。 
     
    978979        /// </param> 
    979980        /// <returns> 
    980         /// 削除した件数。 
     981        /// 更新した件数。 
    981982        /// </returns> 
    982983        /// <exception cref="ArgumentNullException"> 
     
    10051006            bool useInstanceType) 
    10061007        { 
     1008            return Update(transaction, bean, throwOnUnexpectedAffectedRows, useInstanceType, false); 
     1009        } 
     1010 
     1011        /// <summary> 
     1012        /// <see cref="DbTableAttribute"/> 属性の設定されたビーンのプライマリキーの値を条件に 
     1013        /// <c>UPDATE</c> を実行します。 
     1014        /// </summary> 
     1015        /// <typeparam name="T">ビーンの型。</typeparam> 
     1016        /// <param name="transaction"> 
     1017        /// トランザクション。 
     1018        /// </param> 
     1019        /// <param name="bean"> 
     1020        /// <see cref="DbTableAttribute"/> 属性の設定されたクラスのインスタンス。 
     1021        /// </param> 
     1022        /// <param name="throwOnUnexpectedAffectedRows"> 
     1023        /// 更新結果が 1 ではない場合に 
     1024        /// <see cref="UnexpectedAffectedRowsException"/> をスローする場合は <see langword="true"/>。 
     1025        /// それ以外の場合は <see langword="false"/>。 
     1026        /// </param> 
     1027        /// <param name="useInstanceType"> 
     1028        /// ビーンのインスタンスの型からビーン情報を取得する場合は <see langword="true"/>。 
     1029        /// <typeparamref name="T"/> からビーン情報を取得する場合は <see langword="false"/>。 
     1030        /// </param> 
     1031        /// <param name="holdLock"> 
     1032        /// 更新対象が無かった場合でもロックを維持する場合は <see langword="true"/>。 
     1033        /// それ以外の場合は <see langword="false"/>。 
     1034        /// </param> 
     1035        /// <returns> 
     1036        /// 更新した件数。 
     1037        /// </returns> 
     1038        /// <exception cref="ArgumentNullException"> 
     1039        /// <paramref name="transaction"/> または 
     1040        /// <paramref name="bean"/> が <see langword="null"/> 参照です。 
     1041        /// </exception> 
     1042        /// <exception cref="InvalidOperationException"> 
     1043        /// データの更新が許可されていないビーンです。 
     1044        /// </exception> 
     1045        /// <exception cref="ArgumentException"> 
     1046        /// <paramref name="bean"/> のクラスに<see cref="DbTableAttribute"/> 属性が設定されていないか、 
     1047        /// <see cref="DbFieldAttribute"/> 属性を持つプロパティが無いか、 
     1048        /// プライマリキーの指定があるプロパティの値が不正か、 
     1049        /// または、値の設定されたフィールドが存在しません。 
     1050        /// </exception> 
     1051        /// <exception cref="UnexpectedAffectedRowsException"> 
     1052        /// 更新件数が 1 ではありません。 
     1053        /// </exception> 
     1054        /// <remarks> 
     1055        /// プライマリキーに指定されているフィールドは更新できません。 
     1056        /// </remarks> 
     1057        public static int Update<T>( 
     1058            ICommonDbTransaction transaction, 
     1059            T bean, 
     1060            bool throwOnUnexpectedAffectedRows, 
     1061            bool useInstanceType, 
     1062            bool holdLock) 
     1063        { 
    10071064            // 引数をチェック 
    10081065            if (transaction == null) 
     
    10161073            } 
    10171074 
    1018             int affectedRows = UpdateImpl(transaction, bean, default(T), useInstanceType); 
     1075            int affectedRows = UpdateImpl(transaction, bean, default(T), useInstanceType, holdLock); 
    10191076            if (throwOnUnexpectedAffectedRows && affectedRows != 1) 
    10201077            { 
     
    10461103        /// </param> 
    10471104        /// <returns> 
    1048         /// 削除した件数。 
     1105        /// 更新した件数。 
    10491106        /// </returns> 
    10501107        /// <exception cref="ArgumentNullException"> 
     
    10671124            T conditionFieldBean) 
    10681125        { 
    1069             return UpdateAll(transaction, dataFieldBean, conditionFieldBean, false); 
     1126            return UpdateAll(transaction, dataFieldBean, conditionFieldBean, false, false); 
    10701127        } 
    10711128 
     
    10951152        /// </param> 
    10961153        /// <returns> 
    1097         /// 削除した件数。 
     1154        /// 更新した件数。 
    10981155        /// </returns> 
    10991156        /// <exception cref="ArgumentNullException"> 
     
    11171174            bool useInstanceType) 
    11181175        { 
     1176            return UpdateAll(transaction, dataFieldBean, conditionFieldBean, useInstanceType, false); 
     1177        } 
     1178 
     1179        /// <summary> 
     1180        /// <see cref="DbTableAttribute"/> 属性の設定されたビーンを元に 
     1181        /// <c>UPDATE</c> を実行します。 
     1182        /// </summary> 
     1183        /// <typeparam name="T"> 
     1184        /// ビーンの型。 
     1185        /// </typeparam> 
     1186        /// <param name="transaction"> 
     1187        /// トランザクション。 
     1188        /// </param> 
     1189        /// <param name="dataFieldBean"> 
     1190        /// 更新対象の項目に値が設定されている、 
     1191        /// <see cref="DbTableAttribute"/> 属性を持つクラスのインスタンス。 
     1192        /// </param> 
     1193        /// <param name="conditionFieldBean"> 
     1194        /// 更新条件の項目に値が設定されている、 
     1195        /// <see cref="DbTableAttribute"/> 属性を持つクラスのインスタンス。 
     1196        /// <paramref name="dataFieldBean"/> のプライマリフィールドを 
     1197        /// 条件にする場合は <see langword="null"/>。 
     1198        /// </param> 
     1199        /// <param name="useInstanceType"> 
     1200        /// ビーンのインスタンスの型からビーン情報を取得する場合は <see langword="true"/>。 
     1201        /// <typeparamref name="T"/> からビーン情報を取得する場合は <see langword="false"/>。 
     1202        /// </param> 
     1203        /// <param name="holdLock"> 
     1204        /// 更新対象が無かった場合でもロックを維持する場合は <see langword="true"/>。 
     1205        /// それ以外の場合は <see langword="false"/>。 
     1206        /// </param> 
     1207        /// <returns> 
     1208        /// 更新した件数。 
     1209        /// </returns> 
     1210        /// <exception cref="ArgumentNullException"> 
     1211        /// <paramref name="transaction"/>、 
     1212        /// <paramref name="dataFieldBean"/> または 
     1213        /// <paramref name="conditionFieldBean"/> が <see langword="null"/> 参照です。 
     1214        /// </exception> 
     1215        /// <exception cref="InvalidOperationException"> 
     1216        /// データの更新が許可されていないビーンです。 
     1217        /// </exception> 
     1218        /// <exception cref="ArgumentException"> 
     1219        /// <paramref name="dataFieldBean"/> のクラスに<see cref="DbTableAttribute"/> 属性が設定されていないか、 
     1220        /// <see cref="DbFieldAttribute"/> 属性を持つプロパティが無いか、 
     1221        /// プライマリキーの指定があるプロパティの値が不正か、 
     1222        /// または、値の設定されたフィールドが存在しません。 
     1223        /// </exception> 
     1224        public static int UpdateAll<T>( 
     1225            ICommonDbTransaction transaction, 
     1226            T dataFieldBean, 
     1227            T conditionFieldBean, 
     1228            bool useInstanceType, 
     1229            bool holdLock) 
     1230        { 
    11191231            // 引数をチェック 
    11201232            if (transaction == null) 
     
    11331245            } 
    11341246 
    1135             return UpdateImpl(transaction, dataFieldBean, conditionFieldBean, useInstanceType); 
     1247            return UpdateImpl(transaction, dataFieldBean, conditionFieldBean, useInstanceType, holdLock); 
     1248        } 
     1249 
     1250        /// <summary> 
     1251        /// <see cref="DbTableAttribute"/> 属性の設定されたビーンのプライマリキーの値を条件に 
     1252        /// <c>UPDATE</c> を実行し、更新対象が無かった場合に <c>INSERT</c> します。 
     1253        /// </summary> 
     1254        /// <typeparam name="T">ビーンの型。</typeparam> 
     1255        /// <param name="transaction"> 
     1256        /// トランザクション。 
     1257        /// </param> 
     1258        /// <param name="bean"> 
     1259        /// <see cref="DbTableAttribute"/> 属性の設定されたクラスのインスタンス。 
     1260        /// </param> 
     1261        /// <returns> 
     1262        /// 新たにデータを追加した場合は <see langword="true"/>。 
     1263        /// 更新した場合は <see langword="false"/>。 
     1264        /// </returns> 
     1265        /// <exception cref="ArgumentNullException"> 
     1266        /// <paramref name="transaction"/> または 
     1267        /// <paramref name="bean"/> が <see langword="null"/> 参照です。 
     1268        /// </exception> 
     1269        /// <exception cref="InvalidOperationException"> 
     1270        /// データの更新が許可されていないビーンです。 
     1271        /// </exception> 
     1272        /// <exception cref="ArgumentException"> 
     1273        /// <paramref name="bean"/> のクラスに<see cref="DbTableAttribute"/> 属性が設定されていないか、 
     1274        /// <see cref="DbFieldAttribute"/> 属性を持つプロパティが無いか、 
     1275        /// プライマリキーの指定があるプロパティの値が不正か、 
     1276        /// または、値の設定されたフィールドが存在しません。 
     1277        /// </exception> 
     1278        /// <exception cref="MissingDataException"> 
     1279        /// 自動採番の値が取得できません。 
     1280        /// </exception> 
     1281        /// <exception cref="SilverFrostException"> 
     1282        /// フィールドの状態が正しくありません。 
     1283        /// </exception> 
     1284        /// <remarks> 
     1285        /// プライマリキーに指定されているフィールドは更新できません。 
     1286        /// </remarks> 
     1287        public static bool Save<T>( 
     1288            ICommonDbTransaction transaction, 
     1289            T bean) 
     1290        { 
     1291            return Save(transaction, bean, false); 
     1292        } 
     1293 
     1294        /// <summary> 
     1295        /// <see cref="DbTableAttribute"/> 属性の設定されたビーンのプライマリキーの値を条件に 
     1296        /// <c>UPDATE</c> を実行し、更新対象が無かった場合に <c>INSERT</c> します。 
     1297        /// </summary> 
     1298        /// <typeparam name="T">ビーンの型。</typeparam> 
     1299        /// <param name="transaction"> 
     1300        /// トランザクション。 
     1301        /// </param> 
     1302        /// <param name="bean"> 
     1303        /// <see cref="DbTableAttribute"/> 属性の設定されたクラスのインスタンス。 
     1304        /// </param> 
     1305        /// <param name="useInstanceType"> 
     1306        /// ビーンのインスタンスの型からビーン情報を取得する場合は <see langword="true"/>。 
     1307        /// <typeparamref name="T"/> からビーン情報を取得する場合は <see langword="false"/>。 
     1308        /// </param> 
     1309        /// <returns> 
     1310        /// 新たにデータを追加した場合は <see langword="true"/>。 
     1311        /// 更新した場合は <see langword="false"/>。 
     1312        /// </returns> 
     1313        /// <exception cref="ArgumentNullException"> 
     1314        /// <paramref name="transaction"/> または 
     1315        /// <paramref name="bean"/> が <see langword="null"/> 参照です。 
     1316        /// </exception> 
     1317        /// <exception cref="InvalidOperationException"> 
     1318        /// データの更新が許可されていないビーンです。 
     1319        /// </exception> 
     1320        /// <exception cref="ArgumentException"> 
     1321        /// <paramref name="bean"/> のクラスに<see cref="DbTableAttribute"/> 属性が設定されていないか、 
     1322        /// <see cref="DbFieldAttribute"/> 属性を持つプロパティが無いか、 
     1323        /// プライマリキーの指定があるプロパティの値が不正か、 
     1324        /// または、値の設定されたフィールドが存在しません。 
     1325        /// </exception> 
     1326        /// <exception cref="MissingDataException"> 
     1327        /// 自動採番の値が取得できません。 
     1328        /// </exception> 
     1329        /// <exception cref="SilverFrostException"> 
     1330        /// フィールドの状態が正しくありません。 
     1331        /// </exception> 
     1332        /// <remarks> 
     1333        /// プライマリキーに指定されているフィールドは更新できません。 
     1334        /// </remarks> 
     1335        public static bool Save<T>( 
     1336            ICommonDbTransaction transaction, 
     1337            T bean, 
     1338            bool useInstanceType) 
     1339        { 
     1340            return Save(transaction, bean, useInstanceType, false); 
     1341        } 
     1342 
     1343        /// <summary> 
     1344        /// <see cref="DbTableAttribute"/> 属性の設定されたビーンのプライマリキーの値を条件に 
     1345        /// <c>UPDATE</c> を実行し、更新対象が無かった場合に <c>INSERT</c> します。 
     1346        /// </summary> 
     1347        /// <typeparam name="T">ビーンの型。</typeparam> 
     1348        /// <param name="transaction"> 
     1349        /// トランザクション。 
     1350        /// </param> 
     1351        /// <param name="bean"> 
     1352        /// <see cref="DbTableAttribute"/> 属性の設定されたクラスのインスタンス。 
     1353        /// </param> 
     1354        /// <param name="useInstanceType"> 
     1355        /// ビーンのインスタンスの型からビーン情報を取得する場合は <see langword="true"/>。 
     1356        /// <typeparamref name="T"/> からビーン情報を取得する場合は <see langword="false"/>。 
     1357        /// </param> 
     1358        /// <param name="holdLock"> 
     1359        /// <c>UPDATE</c> を実行時に、更新対象が無かった場合でもロックを維持する場合は <see langword="true"/>。 
     1360        /// それ以外の場合は <see langword="false"/>。 
     1361        /// </param> 
     1362        /// <returns> 
     1363        /// 新たにデータを追加した場合は <see langword="true"/>。 
     1364        /// 更新した場合は <see langword="false"/>。 
     1365        /// </returns> 
     1366        /// <exception cref="ArgumentNullException"> 
     1367        /// <paramref name="transaction"/> または 
     1368        /// <paramref name="bean"/> が <see langword="null"/> 参照です。 
     1369        /// </exception> 
     1370        /// <exception cref="InvalidOperationException"> 
     1371        /// データの更新が許可されていないビーンです。 
     1372        /// </exception> 
     1373        /// <exception cref="ArgumentException"> 
     1374        /// <paramref name="bean"/> のクラスに<see cref="DbTableAttribute"/> 属性が設定されていないか、 
     1375        /// <see cref="DbFieldAttribute"/> 属性を持つプロパティが無いか、 
     1376        /// プライマリキーの指定があるプロパティの値が不正か、 
     1377        /// または、値の設定されたフィールドが存在しません。 
     1378        /// </exception> 
     1379        /// <exception cref="MissingDataException"> 
     1380        /// 自動採番の値が取得できません。 
     1381        /// </exception> 
     1382        /// <exception cref="SilverFrostException"> 
     1383        /// フィールドの状態が正しくありません。 
     1384        /// </exception> 
     1385        /// <remarks> 
     1386        /// プライマリキーに指定されているフィールドは更新できません。 
     1387        /// </remarks> 
     1388        public static bool Save<T>( 
     1389            ICommonDbTransaction transaction, 
     1390            T bean, 
     1391            bool useInstanceType, 
     1392            bool holdLock) 
     1393        { 
     1394            // ReSharper disable once ExceptionNotDocumented 
     1395            if (Update(transaction, bean, false, useInstanceType, holdLock) != 0) 
     1396            { 
     1397                return false; 
     1398            } 
     1399 
     1400            Insert(transaction, bean, useInstanceType); 
     1401            return true; 
    11361402        } 
    11371403 
     
    11661432            T bean) 
    11671433        { 
    1168             Delete(transaction, bean, true, false); 
     1434            Delete(transaction, bean, true); 
    11691435        } 
    11701436 
     
    17141980        /// <typeparamref name="T"/> からビーン情報を取得する場合は <see langword="false"/>。 
    17151981        /// </param> 
     1982        /// <param name="holdLock"> 
     1983        /// 更新対象が無かった場合でもロックを維持する場合は <see langword="true"/>。 
     1984        /// それ以外の場合は <see langword="false"/>。 
     1985        /// </param> 
    17161986        /// <returns> 
    17171987        /// 削除した件数。 
     
    17271997            T dataFieldBean, 
    17281998            T conditionFieldBean, 
    1729             bool useInstanceType) 
     1999            bool useInstanceType, 
     2000            bool holdLock) 
    17302001        { 
    17312002            DbTableInfo tableInfo = DbTableInfoManager.Get(useInstanceType ? dataFieldBean.GetType() : typeof(T)); 
     
    18042075            }; 
    18052076 
     2077            // FIXME UpdateSafe が SQL Server 専用 
    18062078            using (ICommonDbCommand command 
    1807                 = transaction.CreateCommand(Template, "Update", option)) 
     2079                = transaction.CreateCommand(Template, holdLock ? "UpdateSafe" : "Update", option)) 
    18082080            { 
    18092081                foreach (KeyValuePair<string, object> param in parameterValues) 
  • framework/trunk/CoreTest/CoreTest.csproj

    r1648 r1650  
    407407    <EmbeddedResource Include="TestResources\Data\DbDataOperatorImportTest\22-TruncateWithValue-2.txt" /> 
    408408  </ItemGroup> 
     409  <ItemGroup> 
     410    <EmbeddedResource Include="TestResources\Data\DbDataOperatorBasicTest\TestUpdate.txt" /> 
     411  </ItemGroup> 
     412  <ItemGroup> 
     413    <EmbeddedResource Include="TestResources\Data\DbDataOperatorBasicTest\TestSave.txt" /> 
     414  </ItemGroup> 
    409415  <Import Project="$(MSBuildThisFileDirectory)..\MSBuild.Common.targets" /> 
    410416</Project> 
  • framework/trunk/CoreTest/Sources/Data/DbDataOperatorBasicTest.cs

    r1643 r1650  
    122122                        transaction, 
    123123                        Stores.SameAs(GetType().Assembly, ResourceNamePrefix + "TestInsertEmpty.txt"), 
     124                        "CompareTest"); 
     125                }); 
     126        } 
     127 
     128        /// <summary> 
     129        /// 継承された <see cref="DbDataBean"/> を使用して <c>UPDATE</c> を実行します。 
     130        /// </summary> 
     131        [Test] 
     132        public void TestUpdate() 
     133        { 
     134            Execute( 
     135                delegate(ICommonDbTransaction transaction) 
     136                { 
     137                    DbDataOperator.Insert( 
     138                        transaction, 
     139                        new NormalBean 
     140                        { 
     141                            Id = 1, 
     142                            Int32 = 1, 
     143                            String = "Data 1", 
     144                            Double = 1.1, 
     145                        }); 
     146                    DbDataOperator.Insert( 
     147                        transaction, 
     148                        new NormalBean 
     149                        { 
     150                            Id = 2, 
     151                            Int32 = 2, 
     152                        }); 
     153                    DbDataOperator.Update( 
     154                        transaction, 
     155                        new NormalBean 
     156                        { 
     157                            Id = 1, 
     158                            Int32 = 9, 
     159                        }); 
     160 
     161 
     162                    AutoSequenceNumberBean autoSequenceNumberBean1 = new AutoSequenceNumberBean 
     163                    { 
     164                        Int32 = 11, 
     165                        String = "Data 11", 
     166                        Double = 11.1 
     167                    }; 
     168                    DbDataOperator.Insert( 
     169                        transaction, 
     170                        autoSequenceNumberBean1); 
     171                    DbDataOperator.Insert( 
     172                        transaction, 
     173                        new AutoSequenceNumberBean 
     174                        { 
     175                            Int32 = 22, 
     176                            String = "Data 22", 
     177                            Double = 22.2 
     178                        }); 
     179                    DbDataOperator.Update( 
     180                        transaction, 
     181                        new AutoSequenceNumberBean 
     182                        { 
     183                            Id = autoSequenceNumberBean1.Id.GetValueOrDefault(), 
     184                            Int32 = 99, 
     185                        }); 
     186 
     187                    Assert.That( 
     188                        transaction, 
     189                        Stores.SameAs(GetType().Assembly, ResourceNamePrefix + "TestUpdate.txt"), 
     190                        "CompareTest"); 
     191                }); 
     192        } 
     193 
     194        /// <summary> 
     195        /// 継承された <see cref="DbDataBean"/> を使用して <c>UPDATE</c> を実行します。 
     196        /// </summary> 
     197        [Test] 
     198        public void TestUpdateWithoutException() 
     199        { 
     200            Execute( 
     201                delegate(ICommonDbTransaction transaction) 
     202                { 
     203                    DbDataOperator.Insert( 
     204                        transaction, 
     205                        new NormalBean 
     206                        { 
     207                            Id = 1, 
     208                            Int32 = 1, 
     209                            String = "Data 1", 
     210                            Double = 1.1, 
     211                        }); 
     212                    DbDataOperator.Insert( 
     213                        transaction, 
     214                        new NormalBean 
     215                        { 
     216                            Id = 2, 
     217                            Int32 = 2, 
     218                        }); 
     219                    Assert.That( 
     220                        DbDataOperator.Update( 
     221                            transaction, 
     222                            new NormalBean 
     223                            { 
     224                                Id = 1, 
     225                                Int32 = 9, 
     226                            }, 
     227                            false), 
     228                        Is.EqualTo(1), 
     229                        "NormalBean"); 
     230 
     231 
     232                    AutoSequenceNumberBean autoSequenceNumberBean1 = new AutoSequenceNumberBean 
     233                    { 
     234                        Int32 = 11, 
     235                        String = "Data 11", 
     236                        Double = 11.1 
     237                    }; 
     238                    DbDataOperator.Insert( 
     239                        transaction, 
     240                        autoSequenceNumberBean1); 
     241                    DbDataOperator.Insert( 
     242                        transaction, 
     243                        new AutoSequenceNumberBean 
     244                        { 
     245                            Int32 = 22, 
     246                            String = "Data 22", 
     247                            Double = 22.2 
     248                        }); 
     249                    Assert.That( 
     250                        DbDataOperator.Update( 
     251                            transaction, 
     252                            new AutoSequenceNumberBean 
     253                            { 
     254                                Id = autoSequenceNumberBean1.Id.GetValueOrDefault(), 
     255                                Int32 = 99, 
     256                            }, 
     257                            false), 
     258                        Is.EqualTo(1), 
     259                        "AutoSequenceNumberBean"); 
     260 
     261                    Assert.That( 
     262                        transaction, 
     263                        Stores.SameAs(GetType().Assembly, ResourceNamePrefix + "TestUpdate.txt"), 
     264                        "CompareTest"); 
     265                }); 
     266        } 
     267 
     268        /// <summary> 
     269        /// 継承された <see cref="DbDataBean"/> を使用して存在しないデータに <c>UPDATE</c> を実行します。 
     270        /// </summary> 
     271        [Test] 
     272        public void TestUpdateForNoDataWithException() 
     273        { 
     274            Execute( 
     275                delegate(ICommonDbTransaction transaction) 
     276                { 
     277                    Assert.That( 
     278                        delegate 
     279                        { 
     280                            DbDataOperator.Update( 
     281                                transaction, 
     282                                new NormalBean 
     283                                { 
     284                                    Id = 1, 
     285                                    Int32 = 9, 
     286                                }); 
     287                        }, 
     288                        Throws.TypeOf<UnexpectedAffectedRowsException>(), 
     289                        "NormalBean"); 
     290 
     291 
     292 
     293                    Assert.That( 
     294                        delegate 
     295                        { 
     296                            DbDataOperator.Update( 
     297                                transaction, 
     298                                new AutoSequenceNumberBean 
     299                                { 
     300                                    Id = 1, 
     301                                    Int32 = 99, 
     302                                }); 
     303                        }, 
     304                        Throws.TypeOf<UnexpectedAffectedRowsException>(), 
     305                        "AutoSequenceNumberBean"); 
     306                }); 
     307        } 
     308 
     309        /// <summary> 
     310        /// 継承された <see cref="DbDataBean"/> を使用して存在しないデータに <c>UPDATE</c> を実行します。 
     311        /// </summary> 
     312        [Test] 
     313        public void TestUpdateForNoDataWithoutException() 
     314        { 
     315            Execute( 
     316                delegate(ICommonDbTransaction transaction) 
     317                { 
     318                    Assert.That( 
     319                        DbDataOperator.Update( 
     320                            transaction, 
     321                            new NormalBean 
     322                            { 
     323                                Id = 1, 
     324                                Int32 = 9, 
     325                            }, 
     326                            false), 
     327                        Is.EqualTo(0), 
     328                        "NormalBean"); 
     329 
     330 
     331                    Assert.That( 
     332                        DbDataOperator.Update( 
     333                            transaction, 
     334                            new AutoSequenceNumberBean 
     335                            { 
     336                                Id = 1, 
     337                                Int32 = 99, 
     338                            }, 
     339                            false), 
     340                        Is.EqualTo(0), 
     341                        "AutoSequenceNumberBean"); 
     342                }); 
     343        } 
     344 
     345        /// <summary> 
     346        /// 継承された <see cref="DbDataBean"/> を使用して <c>UPDATE</c> または <c>INSERT</c> を実行します。 
     347        /// </summary> 
     348        [Test] 
     349        public void TestSave() 
     350        { 
     351            Execute( 
     352                delegate(ICommonDbTransaction transaction) 
     353                { 
     354                    DbDataOperator.Insert( 
     355                        transaction, 
     356                        new NormalBean 
     357                        { 
     358                            Id = 1, 
     359                            Int32 = 1, 
     360                            String = "Data 1", 
     361                            Double = 1.1, 
     362                        }); 
     363                    DbDataOperator.Insert( 
     364                        transaction, 
     365                        new NormalBean 
     366                        { 
     367                            Id = 2, 
     368                            Int32 = 2, 
     369                        }); 
     370 
     371                    // 実際は UPDATE 
     372                    DbDataOperator.Save( 
     373                        transaction, 
     374                        new NormalBean 
     375                        { 
     376                            Id = 1, 
     377                            Int32 = 9, 
     378                        }); 
     379 
     380                    // 実際は INSERT 
     381                    DbDataOperator.Save( 
     382                        transaction, 
     383                        new NormalBean 
     384                        { 
     385                            Id = 3, 
     386                            Int32 = 3, 
     387                        }); 
     388 
     389 
     390                    AutoSequenceNumberBean autoSequenceNumberBean1 = new AutoSequenceNumberBean 
     391                    { 
     392                        Int32 = 11, 
     393                        String = "Data 11", 
     394                        Double = 11.1 
     395                    }; 
     396                    DbDataOperator.Insert( 
     397                        transaction, 
     398                        autoSequenceNumberBean1); 
     399                    DbDataOperator.Insert( 
     400                        transaction, 
     401                        new AutoSequenceNumberBean 
     402                        { 
     403                            Int32 = 22, 
     404                            String = "Data 22", 
     405                            Double = 22.2 
     406                        }); 
     407                    DbDataOperator.Save( 
     408                        transaction, 
     409                        new AutoSequenceNumberBean 
     410                        { 
     411                            Id = autoSequenceNumberBean1.Id.GetValueOrDefault(), 
     412                            Int32 = 99, 
     413                        }); 
     414 
     415                    // INSERT は失敗する 
     416                    Assert.That( 
     417                        delegate 
     418                        { 
     419                            DbDataOperator.Save( 
     420                                transaction, 
     421                                new AutoSequenceNumberBean 
     422                                { 
     423                                    Id = 99, 
     424                                    Int32 = 33, 
     425                                }); 
     426                        }, 
     427                        Throws.TypeOf<SqlStatementCommandException>(), 
     428                        "Save(AutoSequenceNumberBean)"); 
     429 
     430                    Assert.That( 
     431                        transaction, 
     432                        Stores.SameAs(GetType().Assembly, ResourceNamePrefix + "TestSave.txt"), 
    124433                        "CompareTest"); 
    125434                }); 
詳しい使い方は TracChangeset を参照してください。