2012-03-25 60 views
2

我有一个对象与一个一对多的关系,另一个实体是急切加载的。实体框架:错误计数与关联

我使用nerddinner示例的paginatedList,因此我对完全形成的查询(包含所有关联和过滤器)进行计数。

当我进行计数时,返回的总数包括关联(行重复的次数与子关联中的对象数相同)。 我试图做一个独特的父母entitiy,但它不工作。

我该怎么办?

编辑:

我使用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; } 
} 

//调用

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

public virtual IQueryable<T> GetAll() 
{ 

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

你可以展示查询的例子吗? – 2012-03-25 21:00:32

+0

也请显示你的'GetAll'方法。 – 2012-03-26 08:35:31

回答

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。你为什么在查询中只用Include?这个不成立。

+0

我也使用EF 4.3.1,我无法管理查看计数生成的SQL(我在MySql数据库)。 它是有道理的,因为我之前创建我的查询来分页一切感谢NerdDinner示例的PaginatedList(请参阅:http://nerddinnerbook.s3.amazonaws.com/Part8.htm#highlighter_938515) – Eric 2012-03-27 07:11:44

+0

否则,是否有一个方法来撤消包含? – Eric 2012-03-27 07:22:16

+0

这是相当重要的信息。您正在使用MySql,因此在实体框架的MySql提供程序中可能会出现问题,因为您看到的行为不正确。 – 2012-03-27 08:01:34