我在WCF 4中有以下服务操作:
public void InsertUsers(IEnumerable<User> Users)
{
using (LaCalderaEntities Context = new LaCalderaEntities())
{
UserBL UserBl = new UserBL(Context);
UserBl.InsertUsers(Users);
Context.SaveChanges();
}
}
操作按预期工作,并向数据库添加用户列表,但我想知道从对象中取回所有UserId(Identity列)的最佳方法。
如果在执行SaveChanges()时在EF服务器上设置UserId属性应该自动回到客户端吗?
答案 0 :(得分:1)
EF会自动使用生成的值更新关键属性。您只需从POCO
访问这些属性即可public void InsertUsers(IEnumerable<User> Users)
{
using (LaCalderaEntities Context = new LaCalderaEntities())
{
UserBL UserBl = new UserBL(Context);
UserBl.InsertUsers(Users);
Context.SaveChanges();
}
foreach (var user in Users)
{
Console.Writeline(user.id);
}
}
答案 1 :(得分:0)
您发送以获取更新的用户对象将在保存后具有附加ID。
如果是void方法,您的服务可以返回ID的Int []。但是,您不知道哪个ID与哪个用户相关联。
public int[] InsertUsers(IEnumerable<User> Users)
{
using (LaCalderaEntities Context = new LaCalderaEntities())
{
UserBL UserBl = new UserBL(Context);
UserBl.InsertUsers(Users);
Context.SaveChanges();
//At This Point Your Users objects have ID's
return Users.Select(u=>u.ID).ToArray()
}
}
如果您需要的只是ID,那么就可以了
答案 2 :(得分:0)
我在另一个SO question找到答案。 WCF在参数中支持ref修饰符,因此这将工作并更新客户端上的源用户列表。
public void InsertUsers(ref IEnumerable<User> Users)
{
using (LaCalderaEntities Context = new LaCalderaEntities())
{
UserBL UserBl = new UserBL(Context);
UserBl.InsertUsers(Users);
Context.SaveChanges();
}
}
但是我不喜欢这个解决方案,我要去安德鲁解决方案,从方法中返回对象列表。