Entity framework 实体框架:关联计数错误
我有一个对象,它与另一个实体有一对多的关系,这个实体是渴望加载的 我使用nerddinner示例中的paginatedList,因此我对完全格式的查询(使用所有关联和过滤器)进行计数 当我进行计数时,返回的总数包括关联(行的重复次数与子关联中的对象数量相同)。 我尝试在父实体上执行一个独特的操作,但不起作用 我能做什么 编辑: 我使用Mysql连接器连接数据库,下面是我的代码:Entity framework 实体框架:关联计数错误,entity-framework,count,Entity Framework,Count,我有一个对象,它与另一个实体有一对多的关系,这个实体是渴望加载的 我使用nerddinner示例中的paginatedList,因此我对完全格式的查询(使用所有关联和过滤器)进行计数 当我进行计数时,返回的总数包括关联(行的重复次数与子关联中的对象数量相同)。 我尝试在父实体上执行一个独特的操作,但不起作用 我能做什么 编辑: 我使用Mysql连接器连接数据库,下面是我的代码: public class Post { [Key] [Column("idPost")] [DatabaseGener
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; }
}
与
公共虚拟IQueryable GetAll()
{
IQueryable query=dbContext.Set();
返回查询;
}
我已经用EF 4.3.1完全尝试了您的代码,
计数
的行为符合预期-它只统计主要实体(Post
)。它甚至不在数据库中执行任何连接:
SELECT
[GroupBy1].[A1] AS [C1]
FROM ( SELECT
COUNT(1) AS [A1]
FROM [dbo].[Posts] AS [Extent1]
) AS [GroupBy1]
顺便问一下,为什么要在查询中使用
Include
,只要Count
?这没有任何意义。您能展示一下发生这种情况的查询示例吗?同时请展示您的GetAll
方法。我也使用EF 4.3.1,无法查看生成的sql进行计数(我使用的是MySql数据库)。这是有意义的,因为我在创建查询之前,使用NerdDinner示例的PaginatedList对所有内容进行分页(请参见此处:),否则,有没有方法撤消包含?这是非常重要的信息。您使用的是MySql,因此在实体框架的MySql提供程序中可能会出现一些问题,因为您看到的行为不正确。您的解决方法是使用单独的查询来计算不包含的计数。我对包含的EF6也有同样的问题。如果我用ToList或其他东西具体化查询,它将获得正确的行数,但对查询本身调用count将获得rows*导航属性,而不仅仅是行数。我之所以有include,是因为我在流程的后面使用了导航属性,并试图在一次调用中获取所有内容。这只是一个非常奇怪的行为,我想看到一个解释。
public virtual IQueryable<T> GetAll()
{
IQueryable<T> query = dbContext.Set<T>();
return query;
}
SELECT
[GroupBy1].[A1] AS [C1]
FROM ( SELECT
COUNT(1) AS [A1]
FROM [dbo].[Posts] AS [Extent1]
) AS [GroupBy1]