public class Category
{
public int Id { get; set; }
public string name { get; set; }
/*因为存在关系约束ParentId 必须为空,不然EF插入数据会出错 */
public int? ParentId { get; set; }
[ForeignKey("ParentId")]
public virtual List<Category> Childs { get; set; }
}
现在要查询出 ParentId 等于Null的数据(SQL语句应该是ParentId is null);
dbContext.Categorys.Where(m=>m.ParentId == null) 这个直接不能用sql语句变成
.... CAST(NULL AS int) AS [C1], ......什么的;
int? val = null
dbContext.Categorys.Where(m=>m.ParentId == val ) 这个生成的语句变成ParentId == null
悲剧啊 不知道怎么写了 各种写法都试了都不行; 求高手解决啊
=============搞定==================
实际上代码不跟上面一样
我是用的
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<Category>().ToTable("Categories")
.HasRequired(m => m.Parent)
.WithMany(m=>m.Childs)
.HasForeignKey(m => m.ParentId);
base.OnModelCreating(modelBuilder);
}
正确写法是:
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<Category>().ToTable("Categories")
.HasMany(m => m.Childs)
.WithOptional(m=>m.Parent)
.HasForeignKey(m => m.ParentId);
base.OnModelCreating(modelBuilder);
}
一直没有想到生成的语句和这个有关系,写了个测试程序才搞定,唉浪费一晚上
既然你都搞定了。园豆就给我吧
这叫浪费吗?
浪费一晚上+1