SQLServerデータベースにRole
、Permission
、およびRolePermission
の3つのテーブルがあります。
RolePermission
は、他の2つのテーブルの外部キーであるqRole
とqPermission
の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クエリで実行する必要があります。
ありがとう
.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;
等.
@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;