获取使用linq记录的新添加的ID到实体

时间:2011-04-16 17:03:10

标签: linq linq-to-entities

嗨,这是我使用linq实体的第一个项目。我已经想出了如何创建一个新记录,我只需要获取分配给它的ID,这样当我在那里添加条目时,我可以将它用作扩展表中的FK。我允许用户创建请求,请求可以是多个设备,所以我有一个Request和RequestedEquipment表。这是我用来创建请求的代码:

public void addReq(ReqType reqType, Employee reqBy, Location loc, string comm)
        {
            int reqID;
            Request req = new Request();
            req.Comments = comm;
            req.Employee = reqBy;
            req.ReqType = reqType;
                req.RequestStatus = findReqStat(1);
            req.Location = loc;
            entities.AddToRequests(req);
            entities.SaveChanges();
        }

如何获取已创建的请求的ID,以便我可以使用它在RequestedEquipment表中创建所需的条目?

3 个答案:

答案 0 :(得分:8)

在调用SaveChanges()之后,您应该能够从新的Request对象中提取ID值,如下所示:

entities.SaveChanges();
reqID = req.ID;

SaveChanges()应该将新记录保存到数据库中,如果ID列设置为DB中的标识列,则应该通过实体框架将该自动生成的ID传递回对象。

另外,以防万一这是一个关于ID字段未自动更新的问题的博文: http://dotnethacker.wordpress.com/2010/12/24/entity-framework-savechanges-doesnt-get-the-generated-identity-key/

答案 1 :(得分:1)

Ryan和Mikecito都是对的。但是,如果您需要通用解决方案,请查看以下函数:

public static T AddEntity<T>(T ent)
{
    Type t = typeof(T);

    try
    {
        using (Entities be = new Entities())
        {
            be.AddObject(t.Name, ent);
            be.SaveChanges();

            return ent;
        }
    }
    catch (Exception)
    {
        return default(T);
    }
}

通过这种方式,您可以创建所需的任何实体,并通过返回新创建的实体来查找其新ID。 HTH。

答案 2 :(得分:0)

我相信您保存更改后,您创建的对象将填充ID字段。

在SaveChanges()行之后,检查ID字段的值。