簡體   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