2017-03-21 13 views
1

ユーザーコードで処理されませんでした。「System.ArgumentExceptionの」タイプのC#の型「System.ArgumentExceptionの」の例外がEntityFramework.dllで発生したが、私はその記述で問題に直面しています

例外が発生しましたEntityFramework.dllでは、ユーザーコードで処理されませんでした。

追加情報:Include path式は、そのタイプで定義されたナビゲーションプロパティを参照する必要があります。参照ナビゲーションプロパティには点線のパスを使用し、コレクションナビゲーションプロパティにはSelect演算子を使用します。

私は私のGetall方法

var gruppi = GroupHelper.GetAll().OrderBy(a => a.Order);

GETALLメソッドを呼び出すときに問題が現れる:GroupLanguageRoleGroupの性質は以下の通りです

public new static ICollection<Group> GetAll() 
    { 
     using (var provider = new GroupProvider()) 
     { 
      provider.QAll().Include 
      (a => a.RoleGroup.Select(c => c.Role)). 
      Include(a=>a.GroupLanguage.Select(b=>b.Language). 
      Where(c=>c.LanguageName=="ENG")).ToList();    
     } 
    } 

を:

public class GroupLanguage 
{ 
    [Key, Column(Order = 1)] 
    public Guid LanguageID { get; set; } 
    [Key, Column(Order = 2)] 
    public int GroupID { get; set; } 
    [ForeignKey("LanguageID")] 
    public Language Language { get; set; } 
    [ForeignKey("GroupID")] 
    public Group Group { get; set; } 
} 

public class RoleGroup 
{ 
    [Key, Column(Order = 1)] 
    public Guid RoleId { get; set; } 
    [Key, Column(Order = 2)] 
    public int GroupId { get; set; } 
    [ForeignKey("RoleId")] 
    public Role Role { get; set; } 
    [ForeignKey("GroupId")] 
    public Group Group { get; set; } 
} 

これは何故ですか?

+0

この問題を解決するには、try-catchブロックを追加すると役立ちます。これまでに何を試しましたか? – confusedandamused

+0

@confusedandamused私はクエリを分割しようとしましたが、成功していないと、私は同じ例外を受け取ります –

答えて

1

Includeでフィルタリングできない場合は、ナビゲーションプロパティを参照する必要があります。あなただけGroupLanguageLanguageName=="ENG"とをロードする必要がある場合は、あなたがあなたのクエリを投影しなければならない

public new static ICollection<Group> GetAll() 
{ 
    using (var provider = new GroupProvider()) 
    { 
     provider.QAll().Include(a => a.RoleGroup.Select(c => c.Role)) 
        .Include(a=>a.GroupLanguage.Select(b=>b.Language)).ToList();    
    } 
} 

が、エンティティへのLINQのが唯一にプロジェクトクエリをサポートするので、あなたのエンティティタイプを失うつもりだ:内部Whereコールを削除します匿名のオブジェクトまたはDTOです。たとえば、

public new static ICollection<GroupDTO> GetAll() 
{ 
    using (var provider = new GroupProvider()) 
    { 
     provider.QAll().Include(a => a.RoleGroup.Select(c => c.Role)) 
        .Include(a=>a.GroupLanguage.Select(b=>b.Language)) 
        .Select(a=>new GroupDTO{GroupName=a.Name, 
              Language=a.GroupLanguage.Select(b=>b.Language) 
                    .Where(c=>c.LanguageName=="ENG")}) 
        .ToList();    
    } 
} 
+0

うーん、私はそれを試してみましょう...しかし、GroupDTOは何でしょうか?私はエンティティのフレームワークで少し新しいです –

+0

申し訳ありませんが、私は説明しておく必要があります、あなたが必要とするだけのプロパティで定義するカスタムクラスです – octavioccl

関連する問題