2012-03-25 8 views
2

Ich habe ein Objekt mit einer Eins-zu-viele-Beziehung mit einer anderen Entität, die eifrig geladen ist.Entity Framework: Falsche Zählung mit Zuordnung

Ich benutze die paginatedList des Nerddinner Beispiel, als Ergebnis ich die Zählung auf die vollständig gebildete Abfrage (mit allen Zuordnungen und Filter).

Wenn ich die Zählung durchführe, enthält die zurückgegebene Gesamtsumme die Zuordnung (Zeilen werden so oft wie die Anzahl der Objekte in der untergeordneten Zuordnung dupliziert). Ich habe versucht, eine eindeutige auf die Elternrechte zu tun, aber es funktioniert nicht.

Was kann ich tun?

Edit:

Ich verwende den Mysql Anschluss an die DB zu verbinden, und hier ist mein Code:

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; } 
} 

// Der Aufruf

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

mit

public virtual IQueryable<T> GetAll() 
{ 

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

Können Sie ein Beispiel der Abfrage zeigen, wo dies geschieht? –

+0

Bitte zeigen Sie auch Ihre 'GetAll' Methode. –

Antwort

1

Ich habe genau versucht Ihr Code mit EF 4.3.1 und der Count verhält sich wie erwartet - es zählt nur Haupteinheiten (Post). Es führt sogar keine Verbindung in der Datenbank aus:

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

Btw. Warum verwenden Sie Include in Abfrage, wo Sie nur Count möchten? Das macht keinen Sinn.

+0

Ich benutze auch EF 4.3.1 und ich kann nicht die generierte sql für die Zählung sehen (ich bin auf einer MySql db). Und es macht Sinn, weil ich meine Abfrage vorher erstellen, um alles dank der PaginatedList des NerdDinner-Beispiels zu paginieren (siehe hier: http://nerddinnerbook.s3.amazonaws.com/Part8.htm#highlighter_938515) – Eric

+0

Sonst gibt es ein Weg das Include rückgängig zu machen? – Eric

+0

Das sind ziemlich wichtige Informationen. Sie verwenden MySql, daher kann es im MySql-Provider für das Entity-Framework ein Problem geben, da das angezeigte Verhalten nicht korrekt ist. –