我正在使用ASP。NET Web API 2和实体框架6提供一些REST接口,将简单数据存储在SQL Server数据库中。对于本地开发,我使用LocalDB 2017,每次我想创建或更新对象时
DbUpdateConcurrencyException
调用时引发
SaveChanges()
。详细错误消息为:
“System”类型的异常。数据实体基础设施EntityFramework中发生DbUpdateConcurrencyException“”。dll,但未在用户代码中处理
其他信息:Store update、insert或delete语句影响了意外的行数(0)。自加载实体后,实体可能已被修改或删除。
删除对象时,此问题不适用。此外,在将相同的代码发布到暂存我们的生产环境时,不会出现这种情况,因为我使用的是SQL Server的完整版本。
因为我发现一些帖子描述了使用
DateTime
,我已经检查过了。但是,即使尝试持久化不使用日期或时间的简单数据,也会出现问题。
我还尝试从本地托管的Web API访问登台数据库,这没有任何问题。所以我认为它与这个特定开发人员的数据库有关。
你知道为什么只有LocalDB才会出现这种异常吗?我能做些什么来避免这种情况?
以下是一些示例代码:
namespace ConsoleApplication1
{
using System;
class Program
{
static void Main(string[] args)
{
using (var model = new MyDbModel())
{
var objectToCreate = new ApplicationError
{
Date = DateTime.Now,
Username = "mu88",
Exception = "<Exception>Something went wrong</Exception>"
};
model.ApplicationError.Add(objectToCreate);
model.SaveChanges();
}
}
}
}
namespace ConsoleApplication1
{
using System.Data.Entity;
public class MyDbModel : DbContext
{
public MyDbModel()
: base("name=MyDbModel")
{
}
public virtual IDbSet<ApplicationError> ApplicationError { get; set; }
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<ApplicationError>().Property(e => e.Username).IsUnicode(false);
}
}
}
namespace ConsoleApplication1
{
using System;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
[Table("tblApplicationError")]
public class ApplicationError
{
[Key]
public int ErrorId { get; set; }
[Column(TypeName = "xml")]
public string Exception { get; set; }
[StringLength(50)]
public string Username { get; set; }
public DateTime? Date { get; set; }
}
}