为什么Entity Framework能够检索实体但不能保存/更新/删除实体?

时间:2010-03-01 14:32:19

标签: c# entity-framework savechanges

我有一个带有本地.MDF文件 WPF 应用,我在其上创建了实体框架类模型。

从数据库中检索实体正常运行

//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 个答案:

答案 0 :(得分:4)

首先,SaveChanges不保证更新。它返回已更改的行数。所以检查返回值。如果它为0,则EF不会认为它进行了更新。如果是> 0然后呢。

其次,您应该剖析SQL以查看EF正在发送的内容。

如果SaveChanges的结果为0,那么原因几乎可以肯定是EF不认为上下文中的任何内容被修改。为什么会这样取决于您如何跟踪您的更改。您上面的代码看起来对于插入是正确的,但是对于更新,ApplyPropertyChanges是多余的,应该删除。

如果EF正在发送SQL但数据库没有对它执行任何操作,则应检查SQL以进行修复。