繁体   English   中英

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

[英]How can I return the inserted id (Identity column) in a WCF + EF POCO solution?

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

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);
    }
}

那么,您发送来获取更新的用户对象将在保存后附加ID。

如果您的服务是无效方法,则可以返回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即可

我在另一个SO问题中找到了答案。 WCF在参数中支持ref修饰符,因此它将起作用并在客户端更新源用户列表。

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

但是我不喜欢这种解决方案,我打算使用安德鲁解决方案,从该方法返回对象列表。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM