2010-07-28 49 views
0

我已经玩过实体框架和MySQL驱动程序。对不起,如果这是一个愚蠢的问题。表格广告对空缺职位PK有一个FK。这两个字段都标记为NOT NULL。我执行一个简单的连接:MySql,实体框架,内部联接生成空检查

var qry = (from vacancy in context.vacancies 
         join advert in context.adverts on vacancy.id equals advert.vacancies.id 
         where advert.status == 1 
         select 
         new 
          { 
           Id = advert.id 
          }) 
          ; 

这将生成以下SQL:

SELECT 1 AS C1, Extent2.id FROM vacancies AS Extent1 
    INNER JOIN adverts AS Extent2 ON (Extent1.id = Extent2.vacancy_id) OR ((Extent1.id IS NULL) AND (Extent2.vacancy_id IS NULL)) 
    WHERE 1 = Extent2.status 

为什么EF生成“IS NULL”为连接条件,当列没有标记为可为空?

感谢,

鲍勃

回答

0
  1. 它的供应商,而不是EF,生成SQL。
  2. 反正这个查询是错误的。 It's generally wrong to use join,并且所有这些连接都会将结果限制为有空缺的广告,而您认为这是空的。
+1

砸 - 谢谢你克雷格。使用关系而不是联接删除了空检查。尽管如此,仍然不知道为什么为空的关系生成空检查 – bob 2010-07-30 13:34:58