私はASP.NET 5(dnx46)RC1を持っています Microsoft.AspNet.IdentityのIdentityUserクラスから継承するUserクラスがあります。 2.1):Entity Framework 6.1.3ナビゲーションプロパティは、関連テーブルへのクエリの後に値を持ちます
私のDbContextでは、私は、関係規定されていOnModelCreating:JOIため
[Table("Roles")]
public class Role : IdentityRole<int>, IBaseEntity, ISecureEntity
{
// Entity Framework Constructor
private Role()
{
}
public Role(string name)
{
Name = name;
}
public override int Id { get; set; }
public new string Name { get; set; }
public new virtual ICollection<UserRole> Users { get; set; }
public bool IsDeleted { get; set; }
}
とのUserRoleクラス:
modelBuilder.Entity<User>()
.HasMany(u => u.Roles)
.WithRequired(ur => ur.User)
.HasForeignKey(ur => ur.UserId);
[Table("Users")]
public class User : BaseUser, IBaseUser
{
// Entity Framework Constructor
private User()
{
}
public User(string userName)
:base(userName)
{
}
[Key]
public override int Id { get; set; }
public bool IsDeleted { get; set; } = false;
public new virtual ICollection<UserRole> Roles { get; set; } = new List<UserRole>();
}
と役割のクラスをn個のテーブル:
public class UserRole : IdentityUserRole<int>, IBaseEntity
{
// Entity Framework Constructor
private UserRole()
{
}
public UserRole(int userId, int roleId)
{
UserId = userId;
RoleId = roleId;
}
public new int UserId { get; set; }
public new int RoleId { get; set; }
public User User { get; set; }
public Role Role { get; set; }
確かに、私はまた、明示的に私のDbContext CTORで遅延読み込みを有効にしている: は真= Configuration.LazyLoadingEnabled。 Configuration.ProxyCreationEnabled = true;
私はこのハックをしなければならない:
// HACK: Check if Roles is empty on user too when updating to EF7, else remove these lines
// Lazy loading hack to get the Roles list for currentUser, seems just querying the UsersRoles table fills the roles
var user2 = currentUser;
var userRoles = await _userRoleRepository.GetAsync(r => r.UserId == user2.Id);
/* END HACK */
はその後currentUser.Rolesナビゲーションプロパティは、突然すべての役割を持っています。だから、UsersRolesテーブルへのクエリは、何らかの形で、Userクラスのインスタンスのナビゲーションプロパティを埋め込んでいるようですね??
テーブルにクエリを実行したときにどのように動作するのか説明できる人はいますか?余計なことは何ですか? さらに重要なのは、その不必要な文を使わずにナビゲーションプロパティを動作させるにはどうすればいいですか?
ありがとう、これは確かに解決策です。私は私の空のctorのすべてを保護する:) – AppSum