1

我在 WCF 4 中有以下服务操作:

public void InsertUsers(IEnumerable<User> Users)
{
    using (LaCalderaEntities Context = new LaCalderaEntities())
    {
        UserBL UserBl = new UserBL(Context);
        UserBl.InsertUsers(Users);
        Context.SaveChanges();
    }
}

该操作按预期工作并将用户列表添加到数据库中,但我想知道从对象中取回所有 UserId(身份列)的最佳方法。

如果在执行 SaveChanges() 时由 EF 在服务器上设置 UserId 属性应该自动返回到客户端?

4

3 回答 3

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);
    }
}
于 2012-05-10T18:45:41.860 回答
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()
    }
}

如果您只需要身份证,那将可以工作

于 2012-05-10T18:54:54.040 回答
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(); 
    } 
} 

但我不喜欢这个解决方案,我要使用 Andrew 解决方案,从方法中返回对象列表。

于 2012-05-12T14:26:02.557 回答