[英]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.