3つのモデル(クラス)を持つアプリケーションがあるとします。 すべてのモデルは以下のように、関係のいくつかの種類があります:LINQまたはEF.Coreでこれを行う方法?
ユーザー - >グループ - >データベース
良く説明:
- ユーザー:クラスどこストアのユーザー名、パスワード、などユーザーが所属するすべてのグループ...したがって、1人のユーザーはを1つ以上持つことができますグループ。
- グループ:このグループにアクセスできるグループ名はデータベースです。あるグループは、の1つ以上のデータベースを持ち、1つ以上ユーザーを持つことができます。
- データベース:接続のプロパティをデータベースに保存します。
class User { public int Id { get; set; } public string Username { get; set; } public string Password { get; set; } public List<Group> Groups { get; set; } } class Group { public int Id { get; set; } public string Name { get; set; } public List<User> Users { get; set; } /* inverse */ public List<Database> Databases { get; set; } } class Database { public int Id { get; set; } public string Hostname { get; set; } public string Username { get; set; } public string Password { get; set; } public string DbName { get; set; } public List<Group> Groups { get; set; } /* inverse */ }
だから、今本当の問題:
多分それはこのようなものだ、クラスにこれを変換します。
私はユーザーのIDだけを持っているとしますが、ユーザーがアクセスできるすべてのデータベースを一覧表示すると思いますグループがアクセスできるすべてのデータベースをリストする必要があります。
これをLINQで「直接」行うことは可能ですか?またはEF.Coreを使って(やはり "直接"の方法で)?
また、私は上記のように、より「長い」方が良いでしょうか?
var user = _context.user.code_to_get_user_by_id(id);
var groups = _context.user.code_to_get_all_groups();
var databases = groups.code_to_get_all_databases();
foreach (var group in groups) {
// do something
}
これは単なる例です。私の実際のアプリケーションは、いくつかの異なる関係とはるかに多くのプロパティを持つ4クラスを持っています。
ようこそ!リンクのみの回答は推奨されず、レビュープロセスで削除される可能性があります。遅かれ早かれリンクが壊れ、答えが役に立たなくなるからです。質問に答えるコードを書くようにしてください。 –
ありがとうございます。私は編集しました。例えば、 –
。あなたのユーザーを取得した後、 'var userDBs = user.Groups.SelectMany(y => y。データベース) ' –