我用这个敲击键盘,基本上我想做的事情很简单。
我使用 EF Power Tools 对现有数据库进行了逆向工程,我这样做主要是因为所讨论的数据库非常旧并且缺少很多外键,甚至是主键。目标是能够向生成的模型添加导航属性,主要是为了在查询模型时拥有更简洁的代码。
现在我有 2 个类User
和CostCentre
,映射到它们各自的表Users
并CostCentres
使用适当的主键,PKUsers
被Username
命名为Userid
,CostCentres
这两者之间的理论关系是 1 到 M(一个用户可以有多个 CostCentre)。我添加了一个导航属性User
喜欢这样
public virtual ICollection<CostCentre> CostCentres { get; set; }
我用一个简单的初始化默认构造函数中的列表
public User()
{
CostCentres = new List<CostCentre>();
}
我像CostCentre
这样添加了一个用户属性
public virtual User User { get; set; }
在生成的CostCentreMap
类中,我像这样映射了导航属性
this.HasRequired(cc => cc.User)
.WithMany(u => u.CostCentres)
.HasForeignKey(cc => cc.Userid);
现在每当我查询db.Users
我无法填充属性时,我知道导航属性的工作方式,因为当我这样做时
db.Users
.Include(u => u.CostCentres);
生成的查询在每个表中的正确列上正确连接,但是如果我这样做
User user = db.Users
.Include("CostCentres")
.SingleOrDefault(u => u.Username == userName);
该物业CostCentres
保持空置。
我很确定我错过了一些非常明显的东西,但为了巴纳比琼斯的爱,我无法得到什么。任何帮助将不胜感激。