嗨,这是我第一个项目使用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表中创建所需的条目?
在调用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/
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 .
我相信您创建的对象将在保存更改后填充ID字段。
在SaveChanges()行之后,检查ID字段的值