2013-10-28 151 views
0

我見過類似問題的答案(Entity framework and Exists clause),但沒有使用lambda,我想了解什麼是錯誤的, 無論是我的映射還是使用方式。我使用實體框架5.實體框架存在子句與lambda

這裏是我的映射:

public class Attribute : EntityWithGuid 
{ 
    ... Other mappings .... 

    [InverseProperty("Attribute")] 
    public virtual ICollection<CategoryAttribute> CategoryAttributes { get; set; } 
} 

public class Category : EntityWithGuid 
{ 
    ... Other mappings .... 

    [InverseProperty("Category")] 
    public virtual ICollection<CategoryAttribute> CategoryAttributes { get; set; } 
} 

public class CategoryAttribute : EntityWithGuid 
{ 
    ... Other mappings .... 

    [ForeignKey("Category_Id")] 
    public virtual Category Category { get; set; } 
    public string Category_Id { get; set; } 

    [ForeignKey("Attribute_Id")] 
    public virtual Attribute Attribute { get; set; } 
    public string Attribute_Id { get; set; } 
} 

如果我運行下面的命令,它工作正常,結果SQL是

var query = Attribute.Where(x => !x.CategoryAttributes.Any()); 

SELECT 
    Extent1.Id, 
    Extent1.Name, 
    Extent1.Type, 
    Extent1.Active 
FROM 
    Attribute AS Extent1 
WHERE 
    NOT EXISTS(SELECT 
      1 AS C1 
     FROM 
      CategoryAttribute AS Extent2 
     WHERE 
      Extent1.Id = Extent2.Attribute_Id) 

但如果我把一個更多的子句出現屬性的Project2別名而不是Extent1,並給出錯誤,因爲在遺留內部的存在子句內Extent1.Id

var query = Attribute.Where(x => !x.CategoryAttributes.Any(y=>y.Category_Id == idcategory)); 

SELECT 
    Project2.Id, 
    Project2.Name, 
    Project2.Type, 
    Project2.Active 
FROM 
    Attribute AS Project2 
WHERE 
    NOT EXISTS(SELECT 
      1 AS C1 
     FROM 
      CategoryAttribute AS Extent2 
     WHERE 
      (Extent1.Id = Extent2.Attribute_Id) 
       AND (Extent2.Category_Id = @p__linq__0)) 

唯一的例外是

未知列 'Extent1.Id' 中發現的問題 'where子句'

+0

你能發佈例外嗎? –

+0

Expect是{「where子句中的未知列'Extent1.Id'」} – user2928833

回答

0

執行了一個簡單的查詢並收到錯誤後,類似的想法出錯了。下面的查詢,SQL和不良別名項目

User.Where(x => x.Name.Contains(partialName)) 

SELECT 
    Project1.Id, 
    Project1.Name 
FROM 
    User AS Project1 
WHERE 
    (LOCATE('Marcelo', Extent1.Name)) > 0 
ORDER BY Project1.Name ASC 

最近我升級MySQL和隨之而來的新的網絡連接器,版本6.7.4。我回到了以前的網絡連接器版本(6.5.6),並且一切都重新開始。