我在使用Identity 2.0的ASP.NET MVC 5应用程序中使用Entity Framework 6.x.我添加了补充配置文件信息,这些信息存储在一个单独的表中,而不是AspNetUsers。为此,我的ApplicationUser类有一个这样的属性:
public class ApplicationUser : IdentityUser {
public virtual SupplementalProfile Supplemental { get; set; }
:
}
补充资料看起来像这样
public class SuplementalProfile {
[Key] public string Id { get; set; }
[StringLength(50), MaxLength(50), Required] public string FirstName { get; set; }
[StringLength(50), MaxLength(50), Required] public string LastName { get; set; }
[ForeignKey("CountryCode")] public virtual Country Country { get; set; }
}
在我的控制器代码中,我试图使用补充配置文件的一些属性,如下所示:
ApplicationUser appuser = UserManager.FindById(User.Identity.GetUserId());
MyDatabaseContext = new ApplicationDbContext();
Currency currency = MyDatabaseContext.Currencies.Where(c => c.CountryCode == appuser.Supplemental.CountryCode).FirstOrDefault();
return currency
但是我得到一个异常,说目标必须是静态的。我发现似乎抛出了因为lambda表达式中的c.CountryCode值为null。实际上,事实证明,虽然appuser确实代表了一个有效的用户,但当我尝试访问Supplemental导航属性时,我得到一个null。
为什么不从导航属性中获取补充配置文件?