我正在尝试更新BreezeJS实体,当我调整单个属性时没有别的(我没有删除)。我收到以下错误消息:
{" $ id":" 1"," $ type":" System.Web.Http.HttpError,System.Web.Http& #34;,"消息":"发生错误。"," ExceptionMessage":"存储更新,插入或删除语句受影响意外的行数(0)。自实体加载后,实体可能已被修改或删除。刷新ObjectStateManager条目。"," ExceptionType":" System.Data.Entity.Infrastructure.DbUpdateConcurrencyException"," StackTrace":" at Breeze.ContextProvider.EF6.EFContextProvider`1.SaveChangesCore(SaveWorkState saveWorkState)\ r \ n的System.Data.Entity.Internal.InternalContext.SaveChanges()\ r \ n在Breeze.ContextProvider.ContextProvider.OpenAndSave(SaveWorkState saveWorkState) \ r \ n在Breeze.ContextProvider.ContextProvider.SaveChanges(JObject saveBundle,TransactionSettings transactionSettings)\ r \ n at Toriga.Prototype.Html5Portal.Controllers.DataController.SaveChanges(JObject saveBundle)in
我被告知这是一个并发异常,但我始终是数据库的唯一用户,所以它不可能。我已检查返回的数据对象的主键是否具有正确的主键。
我的微风控制器:
readonly EFContextProvider<Context> _contextProvider = new EFContextProvider<Context>();
public DataController(IUserManager userManager) : base(userManager) { }
// ~/breeze/Data/Metadata
[HttpGet]
public string Metadata()
{
return _contextProvider.Metadata();
}
// ~/breeze/Data/Jobs
[HttpGet]
public async Task<IQueryable<Work>> Jobs()
{
var currentUser = await UserManager.FindById(Guid.Parse(User.Identity.GetUserId()));
var companyId = currentUser.CompanyId.Value;
return _contextProvider.Context.WorkFolder.Where(w => w.CompanyId == companyId).SelectMany(i => i.Works).Where(j => j.IsDeleted == false);
}
我们使用客户端的(更加简化的)流程是最初&#39;同步&#39;数据,本地存储并在以后更新任何更改。
首先,加载数据并存储在本地存储中:
var jobsQuery = new breeze.EntityQuery.from("Jobs");
em.fetchMetadata().then(function () {
em.executeQuery(jobsQuery).then(function (data) {
_jobs = data.results;
var emCache = em.exportEntities();
store.setItem("EmCache", emCache);
}, function (data) {
deferred.reject(data); // passes back unsuccessful
});
}, function (data) {
console.log(data);
deferred.reject(data); // passes back unsuccessful
});
然后当他们按下同步时我们发出:
em.saveChanges().then(function () {
deferred.resolve();
}, function (error) {
// fail promise
console.log(error);
deferred.reject(error.message);
});
我们总是得到上面的错误。数据模型非常复杂,尽管我所做的改变是微不足道的。道歉,代码示例很简短,但它来自一个有很多依赖关系的大型项目。我已经完成了要点。任何帮助或线索在哪里看看为什么会发生这种情况将是值得赞赏的,在这个问题上似乎并不多。
答案 0 :(得分:1)
事实证明我有一个DBA帮助放入的rowversion字段,这是每次更改都会更新记录。一旦我删除了它,一切都很好了
答案 1 :(得分:0)
我首先删除对数据库的并发检查,然后查看错误是否消失。
如果确实如此,我的猜测是,那么问题可能是