2013-03-28 10 views
5

Próbuję wymienić niektóre kategorie (rodzic relacji dziecka) i mam następujące polecenie do listy wyłącznie kategorie nadrzędneEF Code First porównując wartości null generuje dziwnych zapytaniu

context.Categories.Where(c => c.ParentId == null) 

ale zapytania SQL generowane przez EF niczego nie powrócić zapytanie

sQL generowane przez EF

SELECT 
CAST(NULL AS int) AS [C1], 
CAST(NULL AS varchar(1)) AS [C2], 
CAST(NULL AS bit) AS [C3], 
CAST(NULL AS int) AS [C4] 
FROM (SELECT 1 AS X) AS [SingleRowTable1] 
WHERE 1 = 0 

kategoria modelu

public class Category 
{ 
    public int Id { get; set; } 
    public string Name { get; set; } 
    public bool IsActive { get; set; } 
    public virtual IList<Category> SubCategories { get; set; } 
    internal int? ParentId { get; set; } 
    public virtual Category Parent { get; set; } 

    public override bool Equals(object obj) 
    { 
    var categoryToCompare = obj as Category; 
    if (categoryToCompare == null) return false; 

    return categoryToCompare.Id == Id; 
    } 

    public override int GetHashCode() 
    { 
    return Id.GetHashCode(); 
    } 
} 

Mapowanie

public class CategoryConfiguration : EntityTypeConfiguration<Category> 
{ 
    public CategoryConfiguration() 
    { 
    ToTable("tbl_category"); 
    HasKey(c => c.Id); 
    Property(c => c.Id).HasColumnName("cd_category"); 
    Property(c => c.Name).HasColumnName("ds_category"); 
    Property(c => c.IsActive).HasColumnName("fl_active"); 
    Property(c => c.ParentId).HasColumnName("cd_base_category").IsOptional(); 
    HasMany(c => c.SubCategories).WithRequired(c => c.Parent).HasForeignKey(c => c.ParentId); 
    } 
} 
+0

@caerolus tak EF generowane że –

+0

Wykorzystanie '(c =>! C.ParentId.HasValue)' – Fendy

+0

@Fendy generuje samo zapytanie –

Odpowiedz

0

jestem delegowania to jako odpowiedź, ponieważ pewno jeden z nich będzie działać:

Twoja nieruchomość ParentId musi być public virtual - spróbuj zmienić ten pierwszy.

Następnie spróbuj context.Categories.Where(c => !c.ParentId.HasValue)

Następnie spróbuj context.Categories.Where(c => c.Parent == null)

Mam aplikacji gdzie powyższe działa dobrze.

Następnie spróbuj context.Categories.Where(c => object.Equals(c.Parent, null))

To ostatnie jest bit of a hack from someone at MS, ale widocznie powinny działać.

Powiązane problemy