5

いくつかのカテゴリ (親子関係) を一覧表示しようとしていますが、親カテゴリのみを一覧表示する次のコマンドがあります。

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

しかし、EF によって生成された SQL クエリは何も返しません

EF によって生成された SQL クエリ

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

カテゴリ モデル

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

1 に答える 1

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))

最後の 1 つはMS の誰かからのちょっとしたハックですが、どうやらうまくいくはずです。

于 2013-03-31T13:21:32.830 に答える