我是EF Core的新手,在设计合适的模型时遇到了麻烦。
我的目标是拥有三个数据库表:
这个想法是通过第三个表来绑定用户及其语言,第三个表只包含这样的ID:
Id UserId LanguageId
1 56 1
2 56 2
3 57 1
我创建的课程是:
用户类:
public class ApplicationUser : IdentityUser
{
public List<Language> SpokenLanguages { get; set; }
}
Lanuages:
public class Language
{
public int Id { get; set; }
public ApplicationUser User { get; set; }
public LanguageList LanguageList { get; set; }
}
LanguageList
public class LanguageList
{
public int Id { get; set; }
public string Name { get; set; }
public string Code { get; set; }
}
我的数据库上下文类:
public class ApplicationContext : IdentityDbContext<ApplicationUser>
{
public DbSet<Language> Languages { get; set; }
public DbSet<LanguageList> LanguageList { get; set; }
}
我尝试更新数据库的方式是(控制台样式):
public class _TestController : Controller
{
// Database context.
private ApplicationContext ApplicationContext { get; set; }
// ctor
public _TestController(ApplicationContext applicationContext)
{
this.ApplicationContext = applicationContext;
}
public IActionResult Index()
{
List<LanguageList> allLanguages = this.ApplicationContext.LanguageList.ToList();
ApplicationUser user = new ApplicationUser();
Language language = new Language
{
LanguageList = allLanguages.FirstOrDefault(lang => lang.Name == "English"),
User = user
};
user.SpokenLanguages = new List<Language>();
user.SpokenLanguages.Add(language);
this.ApplicationContext.Languages.Add(language);
this.ApplicationContext.Users.Add(user);
this.ApplicationContext.SaveChanges();
}
}
此代码在数据表中创建正确的行,但是当我尝试从上下文获取ApplicationUser时,它的属性SpokenLanguages始终为null。
此代码有什么问题以及为什么SpokenLanguages属性的值始终为null?
答案 0 :(得分:0)
你有一些关系设置,但除非你告诉它,EF不会遵循这些关系。您可以使用Include
方法执行此操作:
var users = ApplicationContext.Users.Include(u => u.SpokenLanguages).ToList();
......或类似的东西。
请参阅https://docs.microsoft.com/en-us/ef/core/querying/related-data