3

私は Entity Framwork 4.1 と MVC 3 を使用しています。私の質問は、Entity Framework の結合テーブルに関するものです。3つのテーブルを作成しました

  1. ユーザー - ユーザー ID、ユーザー名
  2. 役割 - 役割 ID、役割名
  3. UserInRoles - UserId、RoleId

これらのテーブルを edmx ファイルにプルしました。2 つのテーブルのみが表示されます。つまり、2 つの間に多対多の関連があるユーザーとロールです。

UserInRoles テーブルからユーザーの役割を取得したい場合、どのような方法がありますか?

私は次のようなことをしました

var result = (from ar in roles
                          from au in users
                          where au.UserName == username
                          select new {});

これは機能していません。助けてください。

4

3 に答える 3

1

ご想像のとおり、Entity Framework は、このような単純なルックアップ テーブルを親テーブルに組み合わせて、ユーザーを支援します。コード内でルックアップ テーブルにアクセスすることはできませんが、手間のかかる作業を行い、そのようなテーブルをナビゲートできるようにします。

var result = (from ar in roles
    where ar.Users.UserName == username
    select ar);

または、ラムダを好む場合 (個人的な好み):

var result = context.roles.Where(x => x.Users.UserName == username);

于 2012-10-31T12:53:59.173 に答える
0

他のテーブルへの外部キーである1つの共有主キーとのリレーションシップテーブルしかない場合、エンティティフレームワークはモデル内に多対多のリレーションシップを自動的に生成します。

このテーブルに別の列を追加してモデルに追加するか、関係の別の一意のキーを生成することができます。

詳細については、こちらをご覧ください:http: //learnentityframework.com/LearnEntityFramework/tutorials/many-to-many-relationships-in-the-entity-data-model/

于 2012-10-31T13:10:40.733 に答える
0

それらはリンクされているはずです:

var result = 
    from au in users
    where au.UserName == username
    select au.Roles;

デフォルトで空のコレクションが得られるかどうかはわかりません。Roles コレクションは、手動で取得する必要がある場合があります。(おそらくresult.Fetch()ですが、私はあまり詳しくありません。)

(または、データベースに格納されている実際の UserInRole アイテムへのアクセスを求めていますか?)

于 2012-10-31T12:47:17.093 に答える