User
とOrders
テーブルの間に親子関係があるアプリケーションで作業しています。下のテーブル構造は以下のとおりです。Entity Framework - 1回の変換での親子テーブル更新
ユーザー:
Column | DataType | Constraint
--------|-----------|-------------
UserId | int | Primary key
Username| varchar |
Email | varchar |
IsActive| bit |
注文:
Column | DataType | Constraint
--------|-----------|----------
OrderId | int | Primary key
UserId | int | Foreign key to User.UserId
Type | smallint |
Quantity| smallint |
私はどこ注文ができるユーザーと一度で彼の命令を更新する必要がある機能を1として動的に追加、削除または更新することができます。
私はEntity Framework 6.0を使用していますが、親テーブル(user
)と子テーブル(order
)を単一トランザクションで更新するための最良の解決策が見つかりません。
このような機能を実現するための最良の方法を説明できる人はいますか?以下は
は、私が使用していますコードです:
注私は、エンティティ
public bool ManageUser(UserModel userDetails, string deletedOrders)
{
var isSuccess = false;
try
{
using (var entity = new UserEntity())
{
if (userDetails.UserId == 0)
{
entity.Users.Add(Mapper.Map<User>(userDetails));
}
else
{
var userToEdit = Mapper.Map<User>(userDetails);
foreach (var item in userToEdit.Orders)
{
if (item.OrderId == 0)
{
entity.Entry(item).State = System.Data.Entity.EntityState.Added;
}
else
{
entity.Entry(item).State = System.Data.Entity.EntityState.Modified;
}
}
/***
* How to Write a code here to remove orders using deletedOrders parameter
* Note: deletedOrders contains comma separated Id of the orders which needs to be removed. e.g. "1,5,6"
****/
entity.Entry(userToEdit).State = System.Data.Entity.EntityState.Modified;
}
entity.SaveChanges();
isSuccess = true;
}
}
catch (Exception ex)
{
}
return isSuccess;
}
にオブジェクトをマッピングするためにAutoMapperを使用しています注意してください:これは単純なコードです。しかし、もし私がOrder
のような複数の子テーブルを持っていたらどうしますか?私がコードと同じ練習をするなら、複雑で扱いにくくなるでしょう。そのようなシナリオに最適なアプローチを探しています。
は私たちに今のあなたが持っているコードを表示します! –
@marc_s:コードを追加しました。私を混乱させる複数のコメントをご覧ください。 – user2988458
SaveChangesを呼び出すと、コンテキスト内のすべての変更が、単一のトランザクション内でdbに書き込まれます。だからあなたは終わった。 –