【问题标题】:An exception of type 'System.ArgumentException' occurred in EntityFramework.dll but was not handled in user codeEntityFramework.dll 中出现“System.ArgumentException”类型的异常,但未在用户代码中处理
【发布时间】:2015-01-27 18:24:05
【问题描述】:

我遇到了一个问题:

EntityFramework.dll 中出现“System.ArgumentException”类型的异常,但未在用户代码中处理

附加信息:包含路径表达式必须引用在类型上定义的导航属性。对引用导航属性使用虚线路径,对集合导航属性使用 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; }

【问题讨论】:

  • 您传入的“c => c.ArticleId == articleViewModel.Id”是否表示包含路径?
  • 但是“c => c.ArticleId == articleViewModel.Id”是参数 Expression>[] includeProperties 的正确类型。我发现你的方法很有趣,我自己也没想过。

标签: c# linq entity-framework lambda


【解决方案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();

如果您只想获得一些物品,您应该将条件 elsewere 放在适合您需要的Where 中:

AttachmentFileBLL
   .Instance
   .SomeCollection
   .Where(c => c.ArticleId == articleViewModel.Id)
   .FindAll(c => c.Articles)
   .ToList();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-03-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多