【问题标题】:Xamarin sqLite.SQLiteException: Constraint using two databasesXamarin sqLite.SQLiteException:使用两个数据库的约束
【发布时间】:2020-02-29 15:42:59
【问题描述】:

基本上我想要做的是将相同的数据保存在两个数据库中,数据库完全相同(仅更改数据库名称),当我将数据保存在第一个数据库中时很好,当它尝试保存在第二个显示错误sqLite.SQLiteException: Constraint 这是代码:

var order = new Order
            {
                Id = Generator.GenerateKey(),
                OrderNumber = OrderN,
                OrderDate = DateTimeHelpers.GetDate(),
                CustomerId = SelectedCustomer.Id,
                TotalPrice = totalPrice,
                Discount = DeductMoney,
                TaxAmount = TaxAmount,
                IsSync = false,
                PayMethod = PayMethod,
                Customer = new Customer
                {
                    Id = SelectedCustomer.Id
                },
                DiscountType = (int)PopupDiscountInfo.DiscountType,
                Creator = StoreSettings?.StoreOwner,
                Notes = Notes
            };
            order.OrderDetails = new List<OrderDetail>();

            var orderDetails = new List<OrderDetail>();
            foreach (var item in ProductInSaleOrders)
            {
                orderDetails.Add(new OrderDetail
                {
                    Id = Generator.GenerateKey(),
                    ProductId = item.Id,
                    UnitId = item.UnitId,
                    Product = new Product
                    {
                        Id = item.Id
                    },
                    Unit = new Unit
                    {
                        Id = item.UnitId
                    },
                    Price = item.Price,
                    Quantity = item.Quantity
                });
            }

            await _orderService.SaveOrderAsync(order);
            await _orderDetailService.SaveOrderDetailAsync(orderDetails);
            await _orderService.SaveOrderAsyncB(order);
            await _orderDetailService.SaveOrderDetailBAsync(orderDetails);

当它到达await _orderService.SaveOrderAsyncB(order); 时出现错误

OrderService.cs

public async Task SaveOrderAsyncB(Order order)
        {
            await _orderRepositoryB.InsertWithChildrenAsync(CryptoEngine.EncryptOrder(order));
        }

我一直在阅读有关此错误的信息,但没有解决我的问题

编辑:当我从await _orderService.SaveOrderAsyncB(order); 中删除“等待”时,它看起来可以工作,但没有数据保存到数据库中,我检查了连接,一切正常,但即使在两个数据库完全是空的。

【问题讨论】:

  • 您确定您使用的是两个不同的连接吗?您确定在 2nd db 上没有违反任何限制吗?
  • @Jason 我很确定第二个连接有效(在我遇到问题之前,因为我的应用程序找不到第二个,所以如果我使用第一个数据库的连接,我永远不会注意到第二个数据库文件不存在)
  • 如果交换保存操作的顺序,行为是否会改变?
  • 您确定数据库完全相同吗?有关错误消息,请参阅 this answer
  • @Jason 如果我交换订单我与第二个数据库有同样的问题,所以在同一个数据库中保存两次不是问题,问题在第二个数据库中。

标签: c# sqlite xamarin


【解决方案1】:

问题是我尝试插入的两个表(Order 和 OrderDetail)与其他表(如客户、podruct 等)有关系。 解决方案是将所有数据保存在两个数据库中,而不仅仅是第一个。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-02-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-16
    • 1970-01-01
    相关资源
    最近更新 更多