0
System
Language:C#
Database:SQL
IDE:C# Express 2010

User オブジェクト/クラスと db テーブルがあります。ユーザーには複数のアドレスがあり、既にアドレス テーブルを定義しています。アドレスを DB に追加してコミットするにはどうすればよいですか

ユーザー用の Add 関数を作成しました (以下を参照)。ユーザー クラスはリスト アドレスを保持します。

ユーザークラス

int id
string name
List<Address> adresses

テーブル ユーザー

id
name
addresses

テーブルアドレス

id 
address
user_id (FK)

ユーザー オブジェクトを追加するためのユーザー クラスに Add 関数があります。SO でわかりやすくするために処理コードを削除しました。

私の質問は、追加したばかりのユーザーの ID を取得し、アドレスをデータベースに追加するにはどうすればよいかということです。また、アドレス テーブルで FK を定義するにはどうすればよいですか

 class User {

    public static bool Add(User user, UserOptions option = UserOptions.System)
    {
        //Instantiate the  DataClassesDataContext
        var db = DBContext.Create();

        //Make Sure User does not exist
        //returns true if no existing user
        if (Users.validateForAdd(user))
        {
           //Now add
           db.Users.InsertOnSubmit(user);

           //I assume I would get the id of the user just added but not sure how I do that

           db.SubmitChanges();
           return true;
        }

        //Failed to add
        return false;
    }

最終的解決

以下の回答とコメントから最終的な解決策を投稿すると思いました。

//
// Creating and setting the Objects
//
User user = new User(name="john doe");
EntitySet < Address >  adressList = new EntitySet<Address>();

adressList.Add(new Address("Residential Home");
adressList.Add(new Address("Holiday Home...");

user.address = adressList;

//
//Persisting to the DB
//
var db = new DataContext();
db.Results.InsertOnSubmit(result);
db.SubmitChanges();
4

2 に答える 2

1

上記の Add メソッドに 1 つの変更を加えることができます。bool を返す代わりに、int 型を返すことができます。

public static int Add(User user, UserOptions option = UserOptions.System)
 //Make Sure User does not exist
 //returns true if no existing user
 if (Users.validateForAdd(user))
 {
    ....
    ....
    //Instead of returning true you can return user.id
    return user.id;
 }
    //Instead of returning false you can return default value -1
    return -1;

}

そのため、User クラスのメソッド Add を呼び出して、新しく追加されたユーザーの ID を取得し、その ID を使用してユーザーのアドレスのリストを作成できます。

于 2012-11-15T08:48:44.507 に答える
1

私の質問は、追加したばかりのユーザーの ID を取得し、アドレスをデータベースに追加するにはどうすればよいかということです。

重要なのは、それを必要としないということです。外部キー フィールドに ID を割り当てる代わりに、Linq-2-sql ではエンティティを相互に割り当てます。

だから代わりに

somerelated_table.fk_user_id = user.id

あなたがやる

somerelated_table.user = user

SubmitChanges を呼び出すと、Linq-2-sql が user.id の適切な割り当てを処理します。さらにボーナスとして、すべてが 1 回のトランザクションで行われます。これが linq-2-sql の優れた点です。

于 2012-11-15T12:32:23.960 に答える