私はEntity Frameworkのチュートリアルに従い、ApplicationConfigモデルを作成しました(これは単純化されています)-
public class ApplicationConfig
{
public ApplicationConfig()
{
this.Users = new Collection<User>();
this.Roles = new Collection<Role>();
}
public string Namespace { get; set; }
public virtual ICollection<User> Users { get; set; }
public virtual ICollection<Role> Roles { get; set; }
}
public class User
{
public User()
{
this.Roles = new Collection<Role>();
this.ApplicationConfigs = new Collection<ApplicationConfig>();
}
public int UserId { get; set; }
public string Username { get; set; }
public string Password { get; set; }
public virtual ICollection<Role> Roles { get; set; }
public virtual ICollection<ApplicationConfig> ApplicationConfigs { get; set; }
}
特定のアプリケーションのユーザー名/パスワードを確認する方法があります -
public User ValidateUser(string applicationNamespace, string username, string password)
{
var applicationConfig = GetApplicationConfig(applicationNamespace);
User user = null;
if (applicationConfig != null)
{
user = applicationConfig.Users.FirstOrDefault(u => u.Username.ToLower() == username && u.Password == password);
}
return user;
}
アプリケーションには数百または数千のユーザーがいる可能性がありますが、このパスワード チェックでは、一致するユーザーのみを返したいと考えています。
ICollection と上記のクエリはこの目的に適していますか?
私の主な懸念は、applicationConfig.Users
クエリを実行したいのは 1 人だけですが、何千人ものユーザーがすべて満たされることです。
または、IQueryable や IEnumerable などを使用する必要がありますか?