gpt4 book ai didi

c# - Azure应用程序服务(移动应用程序)违反主键约束

转载 作者:行者123 更新时间:2023-11-30 16:02:37 25 4
gpt4 key购买 nike

我正在使用 Azure 应用服务(移动应用)来开发一个使用 SQLite 离线同步功能的应用程序。我的数据对象模型是:

public class Customer : EntityData
{
public string FirstName { get; set; }
public string LastName { get; set; }
//…
public DateTime DateCreated { get; set; }
public DateTime DateModified { get; set; }
public virtual IList<Card> Cards { get; set; }
}
public class Card : EntityData
{
public bool IsDisabled { get; set; }
public DateTime CreatedDate { get; set; }
public DateTime LastUsedDate { get; set; }
}

我的 Controller 代码是:

    // GET tables/Customer
public IQueryable<Customer> GetAllCustomers()
{
return Query();
}

// GET tables/Customer/48D68C86-6EA6-4C25-AA33-223FC9A27959
public SingleResult<Customer> GetCustomer(string id)
{
return Lookup(id);
}

// PATCH tables/Customers/48D68C86-6EA6-4C25-AA33-223FC9A27959
public Task<Customer> PatchCustomer(string id, Delta<Customer> patch)
{
return UpdateAsync(id, patch);
}

// POST tables/Customer
public async Task<IHttpActionResult> PostCustomer(Customer item)
{
Customer current = await InsertAsync(item);
return CreatedAtRoute("Tables", new { id = current.Id }, current);
}

// DELETE tables/Customer/48D68C86-6EA6-4C25-AA33-223FC9A27959
public Task DeleteCustomer(string id)
{
return DeleteAsync(id);
}

我不太确定这是如何在幕后映射的,但我从我的客户那里打电话:

    await App.MobileService.SyncContext.PushAsync();
await customerTable.PullAsync("customers", customerTable.CreateQuery());

当我执行初始数据同步以插入客户时,一切正常,但是,当我尝试更新其中任何一个时,我收到错误“操作因冲突而失败:'违反主键约束'PK_dbo” 。牌'。无法在对象“dbo.Cards”中插入重复的键。重复的键值为 (000000003414)。请注意,我没有更改卡的详细信息,只是更改了客户。我看过这个帖子:https://blogs.msdn.microsoft.com/azuremobile/2014/06/18/insertupdate-data-with-1n-relationship-using-net-backend-azure-mobile-services/然而,它似乎过于复杂,我不确定这是否是我想要的……有人知道发生了什么吗?

最佳答案

有很多可能出现问题的情况:也许您的客户端实际上正在执行另一次插入而不是更新,这就是您会收到 409 冲突异常的原因。或者,不太可能的是,插入成功但响应丢失,因此客户端将重试插入,并会收到异常。

或者,问题可能出在表之间的关系上。要调试此问题,首先您应该记录发出的请求,以便您可以看到发生了什么。如果您的客户端发送插入而不是更新,您将在日志中看到这一点。请参阅Log outgoing requests in managed client (Xamarin, Windows) .

然后,您可以将调试器附加到远程服务或本地运行的服务,以查看发生 Entity Framework 验证错误的原因。

顺便说一句,如果您正在进行离线同步,您还应该添加冲突处理代码。下面是一个处理 409(插入成功但响应丢失的情况)和 412 前置条件失败(当两个客户端尝试更新相同数据时)的示例:https://github.com/lindydonna/xamarin-forms-offline-sync/blob/master/XamarinFormsOffline/SyncHandler.cs#L23 .

关于c# - Azure应用程序服务(移动应用程序)违反主键约束,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37439666/

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