以代码优先更新Entity Framework 6中的现有实体

时间:2015-09-22 19:26:55

标签: c# entity-framework entity-framework-6

我在更新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,也是一起。

请参阅实体内容示例的屏幕截图:

Screenshot of debug entity

为什么会出现这种情况?

1 个答案:

答案 0 :(得分:2)

这是因为DriverID0,但数据库中没有Driver且ID为0。由于DriverID可以为空,您可以使用DriverID null

除非我在调用Update方法之前看到会发生什么,否则我无法详细说明。