我遇到的问题是:
类型' System.ArgumentException'的例外情况发生在EntityFramework.dll中但未在用户代码中处理
附加信息:Include路径表达式必须引用在类型上定义的导航属性。使用虚线路径作为参考导航属性,使用Select运算符作为集合导航属性。
我该如何解决?
此问题发生在FindAll
方法
articleViewModel.AttachmentFiles = AttachmentFileBLL.Instance.FindAll(c => c.ArticleId == articleViewModel.Id).ToList();
FindAll方法:
public virtual IQueryable<TModel> FindAll(params Expression<Func<TModel, object>>[] includeProperties)
{
IQueryable<TModel> items = RepositoryContainer<TRepository>().FindAll();
if (includeProperties != null)
{
foreach (var includeProperty in includeProperties)
{
items = items.Include(includeProperty); // Problem occurred here!
}
}
return items;
}
public virtual int? ArticleId { get; set; }
public virtual int Id { get; set; }
答案 0 :(得分:1)
您正在向DbExtensions.Include Method传递无效参数,因为它需要
表示要包含的路径的lambda表达式。
而不是像你指定的条件:
c => c.ArticleId == articleViewModel.Id
您需要以不同方式致电FindAll
:
AttachmentFileBLL
.Instance
.FindAll(c => c.ArticleId)
.ToList();
这将指定属性。
但是,由于您还需要为此指定导航属性,因此您需要在此处使用此类属性。我不知道它在你的模型中可以有什么名称,但也许这样:
AttachmentFileBLL
.Instance
.FindAll(c => c.Articles) // Assuming 'Articles' is a navigation property.
.ToList();
如果你只想获得一些物品,你应该把条件放在一些Where
中,以满足你的需要:
AttachmentFileBLL
.Instance
.SomeCollection
.Where(c => c.ArticleId == articleViewModel.Id)
.FindAll(c => c.Articles)
.ToList();