我有一个带有本地.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更新并将实体添加到数据库表中?
答案 0 :(得分:4)
首先,SaveChanges
不保证更新。它返回已更改的行数。所以检查返回值。如果它为0,则EF不会认为它进行了更新。如果是> 0然后呢。
其次,您应该剖析SQL以查看EF正在发送的内容。
如果SaveChanges
的结果为0,那么原因几乎可以肯定是EF不认为上下文中的任何内容被修改。为什么会这样取决于您如何跟踪您的更改。您上面的代码看起来对于插入是正确的,但是对于更新,ApplyPropertyChanges
是多余的,应该删除。
如果EF正在发送SQL但数据库没有对它执行任何操作,则应检查SQL以进行修复。