gpt4 book ai didi

c# - Entity Framework 在调用 SaveChanges 时创建新记录

转载 作者:行者123 更新时间:2023-11-30 16:20:08 26 4
gpt4 key购买 nike

我有两个实体:

public class Order:Entity
{
public virtual User User { get; set; }
...
}

public class User:Entity
{
public virtual ICollection<Order> Orders { get; set; }
...
}

接下来,我创建订单:

var order = _orderService.CreateTransientOrder(orderNumbers, PcpSession.CurrentUser);
PcpSession.Order = order;

这是 CreateTransientOrder。它只是创建Order,但没有保存到数据库中:

public Order CreateTransientOrder(string orderNumbers, User currentUser)
{
...fill fields
order.User = currentUser;
return order;
}

现在一切正常。接下来,我将订单保存到数据库中:

_orderService.CreateOrder(PcpSession.Order);

这是CreateOrder:

public void CreateOrder(Order order)
{
order.OrderDate = DateTime.Now;
_repository.Save(order);
_repository.SaveChanges();
}

这是我的存储库的Save方法:

public void Save<T>(T entity) where T : class, IEntity
{
_context.Set<T>().Add(entity);
}

当在数据库中调用 SaveChanges 时,会创建具有新 ID 的新用户,并且订单具有新的 User_Id。在调试器中的 CreateOrder 方法中,Id 等于当前用户。哪里有问题?
谢谢。

最佳答案

用户可能没有被上下文跟踪。当您向上下文添加订单时,它还会添加相关实体,然后在保存更改时创建一个新用户(或尝试)。 Attach()在您调用 _context.Set<T>().Add(entity); 之前,用户了解上下文.

关于c# - Entity Framework 在调用 SaveChanges 时创建新记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14640951/

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