2

Entity Framework 5 を使用して、既存の MySQL データベースにクエリを実行しようとしています。コード ファーストを使用して、MSDN のこのチュートリアルに従って、既存のデータベースにマップするコード ベースのモデルを作成しました。

と の 2 つのテーブルがusersありbuddiesます。AUserにはid、 a 、nameおよび がありemailます。ABuddyには auser_idと aがありbuddy_idます。AUserにはたくさんBuddiesあります (これもUsersです)。列はテーブルbuddy_idに戻る外部キーです。Usersしたがって、それぞれUserに多くのUsersスルーがありBuddiesます。

public class User
{
    public int Id { get; set; }
    public string Name { get; set; }
    public string Email { get; set; }
    public IList<User> Buddies { get; set; } 
}

これが私のデータベースアクセスコードです:

using (var db = new Models.fooContext())
{
    foreach (Models.user user in db.users)
    {
        var u = new User
        {
            Id      = user.id,
            Name    = user.name,
            Email   = user.email,
            Buddies = new List<User>()
        };

        // this is obviously very inefficient but I am just
        // trying to get anything to work
        foreach (Models.buddy buddy in db.buddies) // this line throws an exception
        {
            if (buddy.user_id == user.id)
            {
                var b = new User();
                // take buddy.user_id and find this user in the user table
                u.Buddies.Add(b);
            }
        }

        // serialize User and write it to a file here
    }
}

このコードは、上記の行で次の例外をスローします。

System.Data.EntityCommandExecutionException: コマンド定義の実行中にエラーが発生しました。詳細については、内部例外を参照してください。」

内部例外はMySql.Data.MySqlClient.MySqlExceptionメッセージ付きです

この接続に関連付けられている開いている DataReader が既に存在し、最初に閉じる必要があります。

私の質問:

  1. Userそれぞれに many があることを EF に伝える関係を作成するにはどうすればよいBuddiesですか?
  2. Useraが manyであることを EF が理解したらBuddies、 を使用してそのレコードbuddy_idを見つけるにはどうすればよいですか?UserBuddy
4

1 に答える 1