“无法确定生产服务器上的依赖操作的有效排序”

时间:2014-12-09 02:55:11

标签: asp.net entity-framework web-services

我一直在研究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();
        }
    }
}

ReadingSubmissionSystemReading1 to many关系

SubmissionParameter只是一个传输对象,因为移动客户端会将JSON对象发送到此Web服务。

我使用Telerik FiddlerJSON发布到此网络服务中进行测试,因此我非常确定问题不在移动客户端。

任何帮助表示赞赏!谢谢!

1 个答案:

答案 0 :(得分:0)

最后我解决了这个问题,虽然我不太清楚为什么会这样。

我将context.SaveChanges()移出foreach循环然后它再次起作用

localhost和生产

希望它可以帮助别人节省时间