我一直在研究WCF网络服务,该服务由移动应用程序使用,该移动应用程序会向其发送一些数据并保存到数据库。
其中一个测试用例是我们尝试在应用程序中附加2条(或更多条)记录,并调用该服务进行批量插入/更新操作。
当我使用localhost
进行测试时一切正常,但是当我们使用生产服务器测试时,只有
保存第一条记录,而另一条记录触发错误消息
Unable to determine a valid ordering for dependent operations...store-generated values.
我不知道是什么原因以及如何解决它。我做了一些研究,我很确定相关的model/DB table
没有循环依赖或自我依赖。
以下是网络服务的摘要:
public void submit(List<SubmissionParameter> param){
using (var context = ObjectContextManager.AuditEnabledInstance){
foreach (var item in param){
ReadingSubmission readingSubmission = context.ReadingSubmissions.Where(p => p.ReadingSubmissionUniqueIdentifier == item.Readingsubmissionuniqueidentifier).SingleOrDefault();
if (readingSubmission == null){
readingSubmission = new ReadingSubmission();
context.ReadingSubmissions.AddObject(readingSubmission);
}
readingSubmission.ReadingSubmissionUniqueIdentifier = item.Readingsubmissionuniqueidentifier;
readingSubmission.SystemID = item.Systemid;
readingSubmission.UserID = item.Userid;
foreach (var record in item.Readings){
SystemReading systemReading = context.SystemReadings.Where(p => p.SystemReadingUniqueIdentifier == record.Systemreadinguniqueidentifier).SingleOrDefault();
if (systemReading == null){
systemReading = new SystemReading();
readingSubmission.SystemReadings.Add(systemReading);
}
systemReading.SystemReadingUniqueIdentifier = record.Systemreadinguniqueidentifier;
systemReading.MeasurementID = record.Measurementid;
}
context.SaveChanges();
}
}
}
ReadingSubmission
和SystemReading
是1 to many
关系
SubmissionParameter
只是一个传输对象,因为移动客户端会将JSON
对象发送到此Web服务。
我使用Telerik Fiddler
将JSON
发布到此网络服务中进行测试,因此我非常确定问题不在移动客户端。
任何帮助表示赞赏!谢谢!
答案 0 :(得分:0)
最后我解决了这个问题,虽然我不太清楚为什么会这样。
我将context.SaveChanges()
移出foreach
循环然后它再次起作用
localhost
和生产
希望它可以帮助别人节省时间