1

エンティティ モデル

だから、それは私のモデルです..素敵で複雑です。

UserID でエリアを取得しようとしています。これを SQL で行う場合、Users テーブルまで一連の結合を行います。LINQ クエリ構文またはメソッド チェーンでこれをどのように行いますか?

これは逆に非常に簡単に行うことができますが、結果のグラフを平坦化するために多くの追加作業を行う必要があり、その間にあるすべてのエンティティを引き戻す必要もあります。

オプションで AreasPermissions と Permissions を含めることができれば、それは大変なことですが、この時点では、それらを取得するための追加のクエリを気にしません。

私が浮かんでいた別のオプションは、関数インポートを sproc に使用し、それを Area にマップすることでした..しかし、他のエンティティを含める必要がある場合、そのオプションはエレガントではなくなります。また、sproc を使用するためだけにsproc を使用することは避けようとしています。なぜなら、それは常に人々にとって滑りやすい坂道だからです..「あることに sproc を使用する」は、「何にも EF (テーブル アクセス) を使用しない」という形になりがちです。

var userByID = new Func<User, bool>(x => x.UserId.Equals(userID, StringComparison.InvariantCultureIgnoreCase));
var user = this._context.Users
    .Include("TeamsUsers.Team.TeamsRoles.Role.RolesAreasPermissions.AreaPermission.Area")
    .Include("TeamsUsers.Team.TeamsRoles.Role.RolesAreasPermissions.AreaPermission.Permission")
    .Single(userByID);
4

1 に答える 1

4

これをテストする方法はありませんが、うまくいくと思います:

var result = 
    from user in _context.Users
    where user.Id == userId
    from teamUser in user.TeamUsers
    from teamRole in teamUser.Team.TeamRoles
    from roleAreaPermission in teamRole.Role.RoleAreaPermissions
    select roleAreaPermission.AreaPermission.Area;
于 2012-09-18T23:34:31.997 に答える