我将Business
和BusinessProgram
声明为:
public class Business : DbIdEntity
{
public string Name { get; set; }
public virtual Address PhysicalAddress { get; set; }
public virtual Address PostalAddress { get; set; }
public Guid OwnerKey { get; set; }
public virtual Account Owner { get; set; }
public virtual IEnumerable<BusinessProgram> BusinessPrograms { get; set; }
}
public class BusinessProgram : DbEntity<Guid>
{
public Business Business { get; set; }
public ProgramType ProgramType { get; set; }
public DateTime? EffectiveDate { get; set; }
public DateTime? ExpireDate { get; set; }
}
DbIdEntity
和DbEntity
只是主键(以及声明自动编号Id
字段的基类。
当我使用此查询查询时
foreach (Data.Business business in context.Businesses.Include(b => b.Owner)
.Include(b => b.PhysicalAddress)
.Include(b => b.Owner)
.Include(b => b.BusinessPrograms)
.OrderBy(b => b.Name))
我还使用一种约定,使以“Key”结尾的属性成为主键和外键,而不是默认的“Id”。
我收到错误:
“指定的包含路径无效.EntityType 'Data.Business'未声明导航 名为'BusinessPrograms'的财产。“
我做错了什么?
更新
我使用IEnumerable
代替ICollection
。使用正确的导航属性类型修复了问题。
答案 0 :(得分:1)
我使用IEnumerable
作为导航类型而不是ICollection
。将其更改为ICollection
可解决此问题。
答案 1 :(得分:0)
我以你描述的方式使用基类的成功相当有限。我首先尝试“展平”你的模型,让它像那样工作。然后你可以尝试重新引入基类; 可能能够使其工作。
如果您想使用默认约定,那么看起来好像BusinessProgram
应包含名为BusinessProgram_BusinessId
的FK属性。或者,您可以为其指定一个不同的名称,并使用属性覆盖默认约定:
[ForeignKey("Business")]
public int BusinessId { get; set;}