我有两个相关实体已构建并与Fluent API链接。
public class EDeal : IEntityBase
{
public int ID { get; set; }
public string Customer_id { get; set; }
public virtual ECustomer Customer { get; set; }
...etc
}
public class ECustomer : IEntityBase
{
public int ID { get; set; }
public string Customer_id { get; set; }
public string Customer_name { get; set; }
public virtual ICollection<EDeal> Deals { get; set; }
...etc
}
与
相关联modelBuilder.Entity<ECustomer>().HasKey(c => c.Customer_id);
modelBuilder.Entity<EDeal>().HasRequired<ECustomer>(s => s.Customer)
.WithMany(r => r.Deals)
.HasForeignKey(s => s.Customer_id);
我认识到这是低效率的链接,但我必须以这种方式链接它,因为我无法控制数据库结构。
需要注意的重要一点是,EDeal需要一个ECustomer(.HasRequired)。数据库在EDeal中包含许多行,它们具有null Customer_id字段,我不想在查询实体时拉这些行。
我认为.HasRequired会确保我从未找回任何没有与他们相关的ECustomer的EDeals,但似乎并非如此。相反,当我尝试按Customer中的属性进行排序时,它似乎只忽略具有NULL Customer_id值的那些行。即便如此,返回查询的.Count()行为也很奇怪。
var count1 = db.Set<EDeal>().Count(); //returns 1112
var count2 = db.Set<EDeal>().ToList().Count(); //returns 1112
var count3 = db.Set<EDeal>().OrderBy(c => c.Customer.Customer_name).Count(); //returns 1112
var count4 = db.Set<EDeal>().OrderBy(c => c.Customer.Customer_name).ToList().Count(); //returns 967
我知道我可以添加.Where(c =&gt; c.Customer.Customer_id!= Null)以确保我只回到我正在寻找的东西,但我希望在实体中找到解决方案配置,因为我有许多泛型函数作用于我的IEntityBase类,它在通用实体上构建动态查询,我不想在这种情况下使用解决方法。
问题:
1)有没有办法限制实体只返回那些拥有相应ECustomer的EDeals?
2)在上面的例子中,为什么count3和count4不同?
提前致谢。