我在更新Entity Framework 6中的现有实体时遇到问题。
我的通用更新方法如下:
public virtual void Update(T entity)
{
if (entity == null)
throw new ArgumentNullException("entity");
_context.Entry(entity).State = System.Data.Entity.EntityState.Modified;
_context.SaveChanges();
}
构造函数是:
protected IContext _context;
protected IDbSet<T> _dbset;
public EntityService(IContext context)
{
_context = context;
_dbset = _context.Set<T>();
}
IContext
基本上是DbContext
的接口。
现在尝试更新时,我收到以下错误;
InnerException = {&#34; UPDATE语句与FOREIGN冲突 KEY约束\&#34; FK_dbo.Appointment_dbo.Driver_DriverID \&#34;。该 数据库中出现冲突\&#34; DEVDB \&#34;,table \&#34; dbo.Driver \&#34;,列 &#39; id&#39;。\ r \ n声明已终止。&#34;}
现在课程(为简洁而减少)是:
public partial class Appointment : AuditableEntity<int>
{
public override int ID { get; set; }
[ForeignKey("AppointmentType")]
public int AppointmentTypeID { get; set; }
public virtual AppointmentType AppointmentType { get; set; }
[ForeignKey("AppointmentStatus")]
public int AppointmentStatusID { get; set; }
public virtual AppointmentStatus AppointmentStatus { get; set; }
[ForeignKey("Driver")]
public int? DriverID { get; set; }
public virtual Driver Driver { get; set; }
[ForeignKey("Vehicle")]
public int? VehicleID { get; set; }
public virtual Vehicle Vehicle { get; set; }
}
现在我尝试通过两个实体传递结果。
即。 VehicleID = 1,其中Vehicle = null,VehicleID = null,其中Vehicle = VehicleEntity,也是一起。
请参阅实体内容示例的屏幕截图:
为什么会出现这种情况?
答案 0 :(得分:2)
这是因为DriverID
是0
,但数据库中没有Driver
且ID为0
。由于DriverID
可以为空,您可以使用DriverID
null
除非我在调用Update
方法之前看到会发生什么,否则我无法详细说明。