如何在WCF + EF POCO解决方案中返回插入的ID(标识列)?

时间:2012-05-10 18:34:13

标签: c# wcf entity-framework

我在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属性应该自动回到客户端吗?

3 个答案:

答案 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(); 
    } 
} 

但是我不喜欢这个解决方案,我要去安德鲁解决方案,从方法中返回对象列表。