【发布时间】:2014-10-30 07:03:40
【问题描述】:
当我使用用户管理器加载用户时
private UserManager<MyUser> GetUserManager()
{
var userStore = new UserStore<MyUser>(_context);
return new UserManager<MyUser>(userStore);
}
public MyUser GetUser(string username)
{
return GetUserManager().FindByName(username);
}
我的 UserAddress 实体已填充,但我在 UserAddress 中的 AddressType 和 Country 实体为空。
但是,使用它来加载用户并填充所有实体。我在这里所做的只是访问实体,但不对它们做任何事情。
public MyUser GetUser(string username)
{
var addressTypes = _context.AddressType.ToList();
var countries = _context.Countries.ToList();
return GetUserManager().FindByName(username);
}
还可以启用延迟加载,如下所示。
public MyUser GetUser(string username)
{
_context.Configuration.LazyLoadingEnabled = true;
var user = GetUserManager().FindByName(username);
_context.Configuration.LazyLoadingEnabled = false;
return user;
}
那么为什么实体在延迟加载的情况下为空,但如果我只是在上下文中访问它们而不对它们做任何事情,它们就可以工作?
我使用的是 DB First。这是我的实体(重要部分)
public class MyUser : IdentityUser
{
public MyUser()
{
this.Address = new List<UserAddress>();
}
public virtual IList<UserAddress> Address { get; set; }
}
[Table("AddressTypes")]
public partial class AddressTypes
{
public AddressTypes()
{
this.Address = new List<UserAddress>();
}
public int Id { get; set; }
public virtual IList<UserAddress> Address { get; set; }
}
[Table("Country")]
public partial class Country
{
public Country()
{
this.Address = new List<UserAddress>();
}
public int Id { get; set; }
public virtual IList<UserAddress> Address { get; set; }
}
[Table("UserAddress")]
public partial class UserAddress
{
public int Id { get; set; }
public string UserId { get; set; }
public int AddressTypeId { get; set; }
public int CountryId { get; set; }
public AddressTypes AddressType { get; set; }
public Country Country { get; set; }
[ForeignKey("UserId")]
public MyUser User { get; set; }
}
【问题讨论】:
标签: c# entity-framework asp.net-identity