C# 首先更新实体框架6代码中的现有实体

C# 首先更新实体框架6代码中的现有实体,c#,entity-framework,entity-framework-6,C#,Entity Framework,Entity Framework 6,我在实体框架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(

我在实体框架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>();
}
现在我已经尝试通过两个实体传递结果

i、 e.VehicleID=1且Vehicle=null,VehicleID=null且Vehicle=VehicleEntity,且两者同时存在

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


您知道为什么会发生这种情况吗?

之所以发生这种情况,是因为
DriverID
0
,但数据库中没有ID为
0
驱动程序。由于
DriverID
是可为空的,您可能可以使用
DriverID
null


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

您正在传递
DriverID=0
,我认为这是Exception@Matthew:您可能可以从您的
约会中删除
DriverID
-EF code将首先负责创建FK给你。类似地,可以删除创建的其他FK属性。导航属性将足以完成任务,EF代码将首先处理其余部分。无法看到树木中的树木。很抱歉
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; }
    }