Почему Entity Framework может извлекать объекты, но не сохранять / обновлять / удалять их? - PullRequest
2 голосов
/ 01 марта 2010

У меня есть приложение WPF с локальным файлом .MDF , для которого я создал модель класса Entity Framework .

Извлечение сущностей из базы данных отлично работает :

//get entities
using (var context = new TestDataEntities1())
{
    var customers = from c in context.Customers
                    select c;
    foreach (var customer in customers)
    {
        TheCustomers.Add(customer);
    }
}

Однако обновление и добавление и удаление * не делают. ** ошибки нет , отладчик выполняет все действия, нет сообщений в выходных данных, но данные в таблице базы данных остаются неизменными .

//update entity
using (var context = new TestDataEntities1())
{
    var customer = (from c in context.Customers
                    where c.Id == 1
                    select c).FirstOrDefault();
    customer.FirstName = DateTime.Now.ToString();
    int num = context.SaveChanges(); //returns 1, table unchanged

}

//add entity
using (var context = new TestDataEntities1())
{
    var customer = new Models.Customers();
    customer.FirstName = "Ned";
    customer.LastName = "Newton";
    context.AddToCustomers(customer);
    int num = context.SaveChanges(); //returns 1, table unchanged
}

//delete entity
using (var context = new TestDataEntities1())
{
    var customer = (from c in context.Customers
                    where c.Id == 2
                    select c).FirstOrDefault();
    context.Detach(customer); // table unchanged
}

Что мне нужно сделать, чтобы Entity Framework также обновлял и добавлял сущности в таблицу базы данных?

1 Ответ

4 голосов
/ 01 марта 2010

Во-первых, SaveChanges не гарантирует обновления. Возвращает количество измененных строк. Поэтому проверьте возвращаемое значение. Если это 0, то EF не думает , что он сделал обновление. Если это> 0, то это так.

Во-вторых, вы должны профилировать SQL, чтобы увидеть, что отправляет EF.

Если результат SaveChanges равен 0, то причина почти наверняка в том, что EF не думает, что что-либо в контексте изменено. Почему это будет зависеть от того, как ваши изменения отслеживаются. Ваш код выше выглядит корректно для вставки, но для обновления ApplyPropertyChanges является излишним и должен быть удален.

Если EF отправляет SQL, но БД с ним ничего не делает, вам следует проверить SQL на предмет исправления.

...