2015-03-24 2 views
0

Say вы имеете следующую модель,Обновление приложенного записей в Entity Framework 6 без изменения внешних ключей

class Car { 
    int Id { get; set; } 
    public virtual List<Passenger> Passengers { get; set; } 
} 

class Passenger { 
    int Id { get; set; } 

    [ForeignKey("Car")] 
    int CarId { get; set; } 
    public virtual Car Car { get; set; } 

    public string Name { get; set; } 
} 

И вы изменяете имя без Entity Framework загрузки модели, просто зная ID, и не зная Автомобиль - в моем случае также при автоматической загрузке & проверка отключена, так как я работал над огромным набором данных.

Делая так пробеги в ошибку

CarDbContext context = new CarDbContext(); // subclass of DbContext 
Passenger passenger = new Passenger(); 
passenger.Id = 1; // this was sent to you from heaven, or from a URL, or whatever 
passenger.Name = "Steve"; // this is your updated variable 
context.Attach(passenger); 
DbEntityEntry<Passenger> dbEntry = context.Entry(passenger); 
dbEntry.Property(e => e.Name).IsModified = true; // we changed the Name, but... 
dbEntry.Property(e => e.CarId).IsModified = false; // we didn't change the Foreign Key 
context.SaveChanges(); // will still yield an error! 

ошибка есть: «Не удалось определить основной конец отношений несколько добавляемые объекты могут иметь один и тот же первичный ключ.»

ответ

0

Чтобы обойти ошибку, вы должны установить CarId на значение, но вы все равно можете пометить его как не измененное. Изменения, которые вы, кажется, делаете, не распространяются на хранилище данных.

// [...] from previous sample 
passenger.CarId = 9001; // it's over 9000 
dbEntry.Property(e => e.CarId).IsModified = false; // we didn't change the Foreign Key 
context.SaveChanges(); // works! 
Смежные вопросы