1

WCF4には次のサービス操作があります。

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

操作は期待どおりに機能し、データベースにユーザーのリストを追加しますが、オブジェクトからすべてのUserId(ID列)を取得するための最良の方法を知りたいです。

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

必要なのがIDだけの場合、それは機能します

于 2012-05-10T18:54:54.040 に答える
0

私は別の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(); 
    } 
} 

しかし、私はこのソリューションが好きではありません。メソッドからオブジェクトのリストを返すAndrewソリューションを使用します。

于 2012-05-12T14:26:02.557 に答える