首页 新闻 会员 周边

搞了8个小时没有搞定 EntityFramework 查询Nullable<int>问题

0
悬赏园豆:100 [已解决问题] 解决于 2015-06-20 02:14

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

一直没有想到生成的语句和这个有关系,写了个测试程序才搞定,唉浪费一晚上

PingMac的主页 PingMac | 初学一级 | 园豆:32
提问于:2015-06-06 07:41
< >
分享
最佳答案
0

既然你都搞定了。园豆就给我吧

收获园豆:40
Giant150 | 小虾三级 |园豆:1165 | 2015-06-08 15:41
其他回答(2)
0

这叫浪费吗?

收获园豆:30
爱编程的大叔 | 园豆:30839 (高人七级) | 2015-06-06 11:41
0

浪费一晚上+1

收获园豆:30
xmodygetz | 园豆:575 (小虾三级) | 2015-06-06 12:55
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册