2

我有一个带有本地 .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 也更新实体并将其添加到数据库表中?

4

1 回答 1

4

首先,SaveChanges不保证更新。它返回更改的行数。所以检查返回值。如果为 0,则 EF认为它没有进行更新。如果它> 0,那么它确实如此。

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

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

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

于 2010-03-01T14:38:01.053 回答