2012-03-25 11 views
2

私は、熱心に読み込まれている別のエンティティと1対多の関係を持つオブジェクトを持っています。Entity Framework:アソシエーションのカウントが間違っています

nerddinnerの例のpaginatedListを使用します。その結果、(すべての関連付けとフィルタを使用して)完全に形成されたクエリでカウントを行います。

私がカウントを行うとき、返された合計には関連付けが含まれます(行は子関連のオブジェクトの数だけ複製されます)。 私は親の資格で独特のことをしようとしましたが、動作しません。

どうすればよいですか?

編集:

私はDBに接続するために、MySQLのコネクタを使用して、ここに私のコードです:

public class Post 
{ 
[Key] 
[Column("idPost")] 
[DatabaseGenerated(DatabaseGeneratedOption.Identity)] 
public int ID { get; set; } 

[Column("title")] 
[Required(AllowEmptyStrings = false)] 
public string Title { get; set; } 

(....) 


[InverseProperty("Post")] 
public ICollection<PostCategory> Categories { get; set; } 

} 

public class PostCategory 
{ 
[Key, Column("idPost", Order = 0)] 
public int PostID { get; set; } 

[Key, Column("name", Order = 1)] 
public string Category { get; set; } 

[Association("PostCategory_Post", "PostID", "ID")] 
public virtual Post Post { get; set; } 
} 

//コール

public virtual IQueryable<T> GetAll() 
{ 

    IQueryable<T> query = dbContext.Set<T>(); 
    return query; 
} 

postRepository.GetAll().Includes(p => p.Categories).Count(); 

+1

これが発生した場合のクエリの例を表示できますか? –

+0

また、 'GetAll'メソッドを表示してください。 –

答えて

1

私は正確に試しましたEF 4.3.1とCountのコードは期待通りに動作します。プリンシパルエンティティ(Post)のみがカウントされます。データベース内での結合も実行しません。

SELECT 
[GroupBy1].[A1] AS [C1] 
FROM (SELECT 
    COUNT(1) AS [A1] 
    FROM [dbo].[Posts] AS [Extent1] 
) AS [GroupBy1] 

Btw。なぜCountが欲しいのですか?Includeをクエリで使用しているのはなぜですか?意味がない。

+0

私はEF 4.3.1も使用しており、生成されたSQLの数を管理することはできません(私はMySQLデータベースを使用しています)。 NerdDinnerの例のPaginatedListのおかげですべてのページをページングする前にクエリを作成するので意味があります(http://nerddinnerbook.s3.amazonaws.com/Part8.htm#highlighter_938515を参照) – Eric

+0

それ以外の場合は、インクルードを元に戻す方法は? – Eric

+0

これは非常に重要な情報です。 MySqlを使用しているため、表示されている動作が正しくないため、Entity FrameworkのMySqlプロバイダで問題が発生する可能性があります。 –

関連する問題