0

我正在尝试在表中插入值。我这样做如下:

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,但是当我检查我的数据库时,表保持为空。我错过了什么?

4

1 回答 1

2

有几件事,

首先附加通常用于告诉 EF 将已经在数据库中的实体连接到上下文。您可以将其用于添加,但您需要手动告诉 EF 该实体是使用状态管理器添加的。这不是你想在这里做的。

添加是向数据库中插入行的常规方式,这实质上也是将该实体添加到 EF 上下文中。

您应该在上下文周围使用 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;
}

如果这仍然不起作用,我建议您查看您的连接字符串并确认它实际上进入了您期望的数据库,也许它在其他地方创建了自己的数据库

使用该应用程序查询表并查看您的行是否存在也可能是值得的

于 2013-07-09T09:46:57.863 回答