2015-09-22 16 views
1

У меня есть вопрос обновления существующего объекта в 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 = { "Оператор UPDATE в противоречии с ИНОСТРАННОЙ KEY ограничением \" FK_dbo.Appointment_dbo.Driver_DriverID \». конфликта произошел в базе данных \ "DEVDB \", таблица \ "dbo.Driver \" столбец «идентификатор» \ г утверждение \ NThe было прекращено "}

Теперь классы (пониженная для краткости) являются:..

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; } 
    } 

Теперь я попытался пропусканием результат через оба объекта.

i.eID VehicleID = 1 с Vehicle = null, VehicleID = null с Vehicle = VehicleEntity, а также вместе.

Смотрите скриншот примера содержание сущности:

Screenshot of debug entity

Любые идеи, почему это происходит, пожалуйста?

+0

Вы передаете 'DriverID = 0', что я считаю основной причиной исключения –

ответ

2

Это происходит потому, что DriverID является 0, но нет Driver в БД с идентификатором 0. Поскольку DriverID обнуляемые, вы, вероятно, можете уйти с DriverID из null

Я не могу разработать гораздо больше, что, если я не вижу, что происходит, прежде чем вызвать метод Update.

+0

@Matthew: вы, вероятно, могли бы избавиться от« DriverID »из вашего класса« Назначение »- EF Code First позаботится о создании FK для тебя. Аналогичным образом, вы можете удалить другие созданные вами свойства FK. Свойства навигации будут достаточными, чтобы выполнить работу, и EF Code First позаботится обо всем остальном. – Floremin

+0

Не удалось увидеть лес для деревьев. Сожалею. –

Смежные вопросы