以前は、多対多の関係や POCO のリレーショナル Id などのすべてのヘルパー テーブルを自分で生成していましUsergroupUsers
たが、今では EF にそれらを処理してもらいたいと考えています。結局のところ、それはそれほど良い考えではないと思います。
問題
UsergroupDynamicField
特定のユーザーのすべてを取得しようとするとN+1
、ユーザーが属するすべてのユーザーグループに対してクエリが生成されます。
ここでは、の代わりにUsergroups
が になると単純に述べるだけで、この問題を克服しました。EFはそれをマップしないため、今はそれを行うことができません。IQUeriable
IEnumerable
ICollection
コード
public class User
{
...
public virtual ICollection<Usergroup> Usergroups { get; set; }
public IEnumerable<UserField> Fields
{
get
{
var fields = this.Usergroups.SelectMany(x => x.UsergroupDynamicFields); // N + 1 for every Usergroup
foreach (var field in fields)
{
yield return new UserField
{
Name = field.Name
};
}
}
}
}
データベース