gpt4 book ai didi

c# - Entity Framework - 单个事务中的父子表更新

转载 作者:太空宇宙 更新时间:2023-11-03 12:37:24 34 4
gpt4 key购买 nike

我正在处理在 UserOrders 表之间有父子关系的应用程序。以下是表结构:

用户:

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 |

根据功能,我必须一次性更新用户及其订单,其中可以动态添加、删除或更新订单。

我正在使用 Entity Framework 6.0,我找不到在单个事务中更新父表 (user) 和子表 (order) 的最佳解决方案。

谁能解释实现此类功能的最佳方法?

下面是我使用的代码:

请注意,我正在使用 AutoMapper 将对象映射到实体

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;
}

注意:这只是一个简单的代码。但是,如果我将有多个子表,如 Order 怎么办?如果我遵循相同的做法,那么代码将变得复杂且难以处理。因此,寻找此类场景的最佳方法。

最佳答案

没有必要为那些应该被删除的实体访问数据库。

  1. 如果 userDetails.Orders 包含应删除的订单,您将它们的状态更改为 foreach (var item in userToEdit.Orders) 循环到 System.Data.Entity.EntityState.Deleted

  2. 如果没有,您只需创建具有合适 ID 的实体,附加它们,然后将它们的 EntityState 也更改为 Deleted:

    var ordersToDelete = deletedOrders.Split(new[] {','},
    StringSplitOptions.RemoveEmptyEntries).Select(x => new Order
    {
    Id = int.Parse(x.Trim())
    })
    .ToList();

    ordersToDelete.ForEach(o =>
    entity.Entry(x).State = System.Data.Entity.EntityState.Deleted);

关于c# - Entity Framework - 单个事务中的父子表更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40396720/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com