我正在尝试向现有实体ProductRevComp
添加新的子实体,产品组件ProductRev
。但是,当我检索ProductRev类的实例时,从不填充Comps集合(即使明确地Including()
它)。我相信我已经正确地映射了所有内容,但它比我想要的更多,这是最容易隐藏错误的地方。但是,对SQL语句进行概要分析表明相关列正在填充正确的数据。
检查db.ProductRevComps
(即我所有comp的DbSet
)显示可以加载记录,并且该映射按预期工作。
映射:
public class ProductRevConfiguration : EntityTypeConfiguration<ProductRev>
{
public ProductRevConfiguration()
{
HasKey(p => p.ProductRevId);
HasMany(p => p.Comps).WithRequired().HasForeignKey(p => p.ParentProductRevId);
Ignore(p => p.ProgrammedParts);
}
}
public class ProductRevCompConfiguration : EntityTypeConfiguration<ProductRevComp>
{
public ProductRevCompConfiguration()
{
HasKey(p => new { p.ParentProductRevId, p.CompProductRevId });
HasRequired(p => p.ParentProductRev).WithMany().HasForeignKey(p => p.ParentProductRevId);
HasRequired(p => p.CompProductRev).WithMany().HasForeignKey(p => p.CompProductRevId);
}
}
产品实体(非常简化):
public class ProductRev
{
public string ProductRevId { get; set; }
public virtual List<ProductRevComp> Comps { get; set; }
public virtual List<ProductRevComp> ProgrammedParts { get { return Comps; } }//Will be filtered once I get this working
public ProductRev() { }
}
Comp实体:
public class ProductRevComp
{
public string ParentProductRevId { get; set; }
public virtual ProductRev ParentProductRev { get; set; }
public string CompProductRevId { get; set; }
public virtual ProductRev CompProductRev { get; set; }
public int CompTypeValue { get; set; }
public ProductRevCompType CompType
{
get { return (ProductRevCompType)CompTypeValue; }
set { CompTypeValue = (int)value; }
}
public enum ProductRevCompType { ProgrammedPart = 1 };
public ProductRevComp() { }
public override string ToString()
{
return base.ToString();
}
}
删除额外的编程部分集合不会改变任何内容。
如何在不诉诸手动数据库命令的情况下让ProductRev实体填充Comps属性?
(必须在办公室关闭时运行,我没有钥匙 - 我希望我已经包含了所有细节,如果有任何遗漏,请发表评论。)