次のクラスを検討してください
public class AccountGroup : Entity<int>
{
public AccountGroup()
{
Accounts = new HashSet<Account>();
Groups = new HashSet<AccountGroup>();
}
// option 1 - read only properties
public bool IsRoot { get { return Parent == null; } }
public bool IsLeaf { get { return !Groups.Any(); } }
public Account MainAccount { get { return Accounts.FirstOrDefault(a=>a.Type == AccountType.MainAccount); } }
// option 2 - parameter-less methods
//public bool IsRoot() { return Parent == null; }
//public bool IsLeaf() { return !Groups.Any(); }
//public Account GetMainAccount() { return Accounts.FirstOrDefault(a => a.Type == AccountType.MainAccount); }
public string Name { get; set; }
public string Description { get; set; }
public virtual ISet<Account> Accounts { get; private set; }
public virtual ISet<AccountGroup> Groups { get; private set; }
public virtual AccountGroup Parent { get; set; }
}
上記のクラスを「充実」させたい場合は、どのオプションアプローチを使用する必要があります。
オプション1
EFがそれらを好まないことを知っている読み取り専用パラメーターを使用する必要があります(Where句でIsRootを使用しようとすると、exがスローされます。The specified type member 'IsRoot' is not supported in LINQ to Entities. Only initializers, entity members, and entity navigation properties are supported.
オプション2
または、パラメータなしの方法を使用する必要があります(何が不利になるかわからない)
.IsRoot
一般に(EFを考慮しない)、機能が同等である場合(つまり、またはを呼び出すと同じ機能が得られる場合)、上記を考慮してどちらのアプローチが推奨されますか.IsRoot()
?