繁体   English   中英

EF Core 表首先不在数据库中保存实体

[英]EF Core table first not saving entities in the database

我是 EF 新手(表优先),我不知道为什么这些相关实体根本没有保存到我的数据库中。 这些是相关的实体,UserProfile 有一组 Carts

public partial class UserProfile
    {
        public UserProfile()
        {
            Cart = new HashSet<Cart>();
            Naquestions = new HashSet<Naquestions>();
        }

        public int Id { get; set; }
        public string BotUserId { get; set; }
        public int? PrestashopId { get; set; }
        public bool Validated { get; set; }
        public int Permission { get; set; }
        public DateTime CreationDate { get; set; }

        public ICollection<Cart> Cart { get; set; }
        public ICollection<Naquestions> Naquestions { get; set; }
    }

购物车有一组 OrderLines

   public partial class Cart
    {
        public Cart()
        {
            OrderLine = new HashSet<OrderLine>();
            OrderRequest = new HashSet<OrderRequest>();
        }

        public int Id { get; set; }
        public int UserId { get; set; }
        public bool Active { get; set; }

        public UserProfile User { get; set; }
        public ICollection<OrderLine> OrderLine { get; set; }
        public ICollection<OrderRequest> OrderRequest { get; set; }
    }

当我尝试添加它们时:

public async Task AddOrderLineToUser(string botId, OrderLine orderLine)
        {
            using (var context = ServiceProvider.CreateScope())
            {
                var db = context.ServiceProvider.GetRequiredService<GretaDBContext>();

                var user = await UserController.GetUserByBotIdAsync(botId);

                var latestCart = user.Cart.OrderByDescending(c => c.Id).FirstOrDefault();

                if (latestCart != null && latestCart.Active)
                {
                    latestCart.OrderLine.Add(orderLine);
                }
                else
                {
                    var newCart = new Cart()
                    {
                        Active = true,
                    };
                    newCart.OrderLine.Add(orderLine);
                    user.Cart.Add(newCart);
                }

                await db.SaveChangesAsync();
            }
        }

调用db.SaveChangesAsync()后,没有任何内容保存到数据库中。

正如@Caius Jard在评论中所说, user似乎来自另一个环境。 尝试

 if (latestCart != null && latestCart.Active)
 {
      orderLine.CartId = latestCart.Id;
      db.OrderLines // I assume it is name of your orderlines DbSet
         .Add(orderLine);
 }
 else
 {
      var newCart = new Cart()
      {
           Active = true,
           UserId = user.Id,
      };
      newCart.OrderLine.Add(orderLine);
      db.Carts // also assuming name of DbSet
         .Add(newCart);
 }

你也可以看看Attach方法。

但我会说,总的来说,你做的事情并不好。 通常不需要创建新的 scope,db context 应该通过 ctor 注入到对应的 class 中。 如果您仍然需要创建新的 scope,那么解析UserController也是有意义的。 UserController也是 ASP controller 吗?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM