Обновите Entity в базе данных с помощью EF, не извлекая существующие [дубликаты]

Возможный дубликат:
Как обновить запись без повторного выбора этой записи в ADO.NET Entity Framework?

я работаю над приложением Windows, которое мне нужно, чтобы показать список объектов и их дочерних элементов в сетке. поэтому пользователь может изменить объект, полученный из структуры объекта.

при обновлении объектов в БД похоже, что необходимо получить объект из БД и присвоить новые значения. Это может вызвать проблемы с производительностью. есть ли работа для этого?

    public class Vehicle
    {
        public Vehicle()
        {
            this.Fillups = new List<FillupEntry>();
            this.Reminders = new List<Reminder>();
        }
        public int VehicleId { get; set; }
        public int UserId { get; set; }
        public string Name { get; set; }
        public string ModelName { get; set; }
        public ICollection<FillupEntry> Fillups { get; set; }
        public ICollection<Reminder> Reminders { get; set; }
    }




        public void Update(Vehicle updatedVehicle)
        {
            Vehicle vehicleToUpdate =
                this.GetDbSet<Vehicle>()
                        .Where(v => v.VehicleId == updatedVehicle.VehicleId)
                        .First();

            vehicleToUpdate.Name = updatedVehicle.Name;
            vehicleToUpdate.Year = updatedVehicle.Year;
            vehicleToUpdate.MakeName = updatedVehicle.MakeName;
            vehicleToUpdate.ModelName = updatedVehicle.ModelName;
            vehicleToUpdate.SortOrder = updatedVehicle.SortOrder;
            vehicleToUpdate.PhotoId = updatedVehicle.PhotoId;

            this.SetEntityState(vehicleToUpdate, vehicleToUpdate.VehicleId == 0
                                                     ? EntityState.Added
                                                     : EntityState.Modified);
            this.UnitOfWork.SaveChanges();
        }

person Anand Kumar    schedule 21.09.2012    source источник


Ответы (1)


Хороший способ сделать это с помощью вещи, которую я называю фиктивными сущностями. Это когда вы прикрепляете фальшивую сущность к графу, в котором есть только ключ. EF будет обновлять реквизиты, которые вы установили после вызова обновления.

Итак, в вашем примере:

Vehicle vehicleToUpdate = new Vehicle { VehicleId = updatedVehicle.VehicleId};
context.Vehicles.Attach(vehicleToUpdate);

vehicleToUpdate.Name = updatedVehicle.Name;
vehicleToUpdate.Year = updatedVehicle.Year;
vehicleToUpdate.MakeName = updatedVehicle.MakeName;
vehicleToUpdate.ModelName = updatedVehicle.ModelName;
vehicleToUpdate.SortOrder = updatedVehicle.SortOrder;
vehicleToUpdate.PhotoId = updatedVehicle.PhotoId;

context.SaveChanges();

вы хотите убедиться, что делаете это в новом контексте, так как присоединение приведет к ошибке, если сущность уже отслеживается контекстом.

person Not loved    schedule 21.09.2012