使用上下文插入数据库不起作用

时间:2013-07-09 09:36:54

标签: c# database entity-framework visual-studio-2012

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

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

1 个答案:

答案 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通常是由数据库生成的