我有一个表“JobOrder”,它使用正常的EF调用添加到数据库中 在我的数据库中,我将Job_Id设为主键&自动增量值,所以我不需要设置EF模型将其默认为0 但我需要在调用SaveChanges()后插入数据库的Job_Id 我尝试使用Refresh()但它不起作用,新插入的对象的Job_Id仍为0。
using (ObjContext context = new ObjContext())
{
context.AddToJobOrder(order);
context.SaveChanges();
context.Refresh(RefreshMode.StoreWins, order); //TRIED THIS
context.Refresh(RefreshMode.StoreWins, context.JobOrder); //TRIED THIS TOO
}
我试过上面提到的两个电话,但我最终还是让Job_Id为0 任何帮助将不胜感激。
答案 0 :(得分:1)
在正常情况下,您不需要刷新方法。在context.SaveChanges()
之后,新插入的订单必须具有正确的order.Job_id
。当然,如果你有MSSQL数据库......在其他情况下,提供商可能会有一些未实现的东西,目前几乎所有主要的数据库供应商都至少拥有正常的beta版本的数据库提供商,并支持常见的EF功能。
PS网上有许多类似的问题,也有堆栈溢出问题。例如,请参阅this。
答案 1 :(得分:1)
将对象添加到上下文时,SaveChanges()
应正确填充ID字段。
所以试试这个,设置一个断点,你会看到主键ID设置正确。
using (ObjContext context = new ObjContext())
{
context.AddToJobOrder(order);
context.SaveChanges();
//Breakpoint here, and see that Job_id has been populated.
Debug.WriteLine(order.Jod_id);
}
只有 .SaveChanges
后才能设置主键,因为它必须转到数据库并找到下一个数值。
答案 2 :(得分:0)
确保在和 CSDL和SSDL中将StoreGeneratedPattern属性设置为Identity。设计器仅显示CSDL属性,因此您可能需要在XML编辑器中打开它以查看和编辑SSDL,或使用同步工具(例如my add-in的模型比较器对于EF4),保持DB / SSDL / CSDL同步。