我正在尝试在表格中插入值。 我这样做:
JobTable jobTable = new JobTable();
int result = -1;
JobEntities context = new JobEntities();
try
{
jobTable.JobDate = DateTime.Now;
jobTable.JobProcess = processName;
context.JobTable.Attach(jobTable);
context.JobTable.Add(jobTable);
result = context.SaveChanges();
Console.WriteLine("Result => " + result.ToString());
}
catch (Exception)
{
throw;
}
return jobTable.JobId;
我每次都会得到一个新的JobId,但是当我检查我的数据库时,该表保持空白。 我错过了什么?
答案 0 :(得分:2)
有几件事,
首先,attach通常用于告诉EF将已存在于数据库中的实体连接到上下文。您可以将此用于添加,但您需要手动告知EF使用状态管理器添加此实体。这不是你想要做的。
添加是将行插入数据库的常规方法,这实际上也是将该实体添加到EFs上下文中。
您应该在上下文周围使用using块以确保其正确处理。这一点尤其重要,因为EF会保留所有实体的副本以跟踪已更改的内容,因此不处理上下文会导致严重的内存泄漏。
以下是我认为您的代码应如下所示:
JobTable jobTable = new JobTable();
using(var context = new JobEntities())
{
jobTable.JobDate = DateTime.Now;
jobTable.JobProcess = processName;
context.JobTable.Add(jobTable);
var result = context.SaveChanges();
Console.WriteLine("Result => " + result.ToString());
return jobTable.JobId;
}
如果这仍然无法正常工作,我建议你查看你的连接字符串并确认它实际上是你想要的数据库,也许它在其他地方创建了自己的数据库
使用app来查询表并查看你的行是否存在也是值得的,如果它设置了一个ID,这意味着它实际上已经获得了SQL,因为ID通常是由数据库生成的