web-dev-qa-db-ja.com

Entity Frameworkは、外部キーを使用してテーブルからデータを取得します

SQLServerデータベースにRolePermission、およびRolePermissionの3つのテーブルがあります。

RolePermissionは、他の2つのテーブルの外部キーであるqRoleqPermissionの2つの列で構成されます。

したがって、Entity Frameworkがモデルを作成するときは、2つのクラスを作成し、RolePermissionの仮想プロパティを各ロールクラスとアクセス許可クラスに追加するだけです。

次に、RolePermissionから列を選択する必要があるので、次のコードを記述しました。

var rolePermission = PREntitiy.Roles.Where(r => r.qRole == TxtRole.Text)
                                    .Select(p => p.Permissions);

これを行うと、rolePermissionテーブルにアクセスできますが、SQLのjoinステートメントで行うように、単一のクエリでロールテーブルからいくつかの列を取得し、rolePermissionからいくつかの列を取得する必要があります。

つまり、ロールテーブルの列とrolePermissionの列にアクセスするには、linqクエリが必要ですが、SQLの結合ステートメントのように1つのlinqクエリで実行する必要があります。

ありがとう

10
mpakbaz

.Include()ステートメントを探しています

http://msdn.Microsoft.com/en-us/data/jj574232.aspx

var role = PREntitiy.Roles.Include(r=>r.Permission).Where(r => r.qRole == TxtRole.Text)

すべてのクラスがないため、Permissionプロパティが正しくない可能性があります。

通常のようにドット表記を使用して、各クラスのプロパティにアクセスします。

var x = role.name;
var y = role.Permission.Name;

等.

26
BlackICE

@BlackICEは彼の提案で私を大いに助けてくれました。これはまったく同じではありませんが、私は同様の問題を抱えていました。ユーザー(ユーザー名、パスワード)、ロール(RoleId、ロール名)、およびユーザーロール(ユーザー名、ロールID)の3つのテーブルがあります。最後は他の2つのキーで構成されていました。役割を取得するには、ユーザー名を指定して、次のことを行う必要がありました。これが適切か不適切かはわかりませんが、私にとってはうまくいきました:)。

IQueryable<User> IQUsers = _dbContext.Users.Include(u => u.Roles).Where(u => u.Username == username);
User _user = IQUsers.FirstOrDefault<User>();
Role _role = _user.Roles.FirstOrDefault<Role>();
roleName = _role.RoleName;
0