2013-03-28 48 views
5

我正尝试列出一些类别(父子关系),我有以下命令列出由EF生成唯一的父类EF代码首先比较空值产生奇怪的查询

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

但SQL查询不返回任何由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 

分类模型

产生

SQL查询

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

映射

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是EF生成 –

+0

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

+0

@Fendy产生相同的查询 –

回答

0

我张贴这是一个答案,因为肯定其中之一将工作:

ParentId财产必须public virtual - 尝试改变,第一。

然后,尝试context.Categories.Where(c => !c.ParentId.HasValue)

然后,尝试context.Categories.Where(c => c.Parent == null)

我在上面正常工作的应用程序。

然后,尝试context.Categories.Where(c => object.Equals(c.Parent, null))

这最后一个是bit of a hack from someone at MS,但显然应该工作。