c#-Azure应用服务(移动应用)违反主键约束
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了c#-Azure应用服务(移动应用)违反主键约束,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2649字,纯文字阅读大概需要4分钟。
内容图文
![c#-Azure应用服务(移动应用)违反主键约束](/upload/InfoBanner/zyjiaocheng/665/6228e7d436dc4049bdecd4a8825b866c.jpg)
我正在使用Azure App Services(移动应用程序)来通过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; }
}
我的控制器代码是:
// 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.Cards’ .无法在对象“ 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).
然后,您可以将调试器附加到远程服务或本地运行的调试器,以查看为什么发生实体框架验证错误.
顺便说一句,如果您要进行离线同步,则还应该添加冲突处理代码.这是一个处理409(对于插入成功而响应丢失的情况)和412前提条件失败(当两个客户端尝试更新相同数据时)的示例:https://github.com/lindydonna/xamarin-forms-offline-sync/blob/master/XamarinFormsOffline/SyncHandler.cs#L23.
内容总结
以上是互联网集市为您收集整理的c#-Azure应用服务(移动应用)违反主键约束全部内容,希望文章能够帮你解决c#-Azure应用服务(移动应用)违反主键约束所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。