嗨,这是我使用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表中创建所需的条目?
答案 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)
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字段的值。