OnModelCreating使用HasMany设置级联删除导致问题

时间:2011-03-30 15:51:17

标签: entity-framework ef-code-first entity-framework-4.1

考虑两个替代路线:

    modelBuilder.Entity<CommissionStructure>().HasMany(c => c.CommissionUnits).WithOptional().WillCascadeOnDelete(true);

    modelBuilder.Entity<CommissionStructure>().HasMany<CommissionUnit>(c=>c.CommissionUnits).WithOptional().WillCascadeOnDelete(true);

第一行抱怨TTarget无法从使用中推断出来。

所以我尝试了第二行,但它现在抱怨无法将IEnumerable转换为ICollection,即使我的模型没有被定义为ICollection。

有什么想法吗? CommissionUnits是CommissionStructure中嵌套的IEnumerable集合。这是一个IList之前,但IList在我的存储库中使用OrderBy的LINQ查询中执行ToList()时遇到问题。这就是我在我的存储库中暴露IEnumerable而不是IList的原因。所以我有点卡在摇滚乐之间一个艰难的地方!

1 个答案:

答案 0 :(得分:1)

HasMany作为EntityTypeConfiguration<T>的方法有此签名:

HasMany<TTarget>(Expression<Func<T, ICollection<TTarget>>> expression)

表示您无法将IEnumerable<T>用于导航属性。您需要ICollection<T>或派生的集合类型。这解释了您的编译器错误。