当我在子表中具有与外键相同的列名时,为什么EF会生成无效列

时间:2014-06-20 09:10:47

标签: c# sql entity-framework linq-to-sql

我有这两个型号,我使用" include"获取所有相关实体,我的LINQ看起来像这样,当我执行它时会抱怨 - Invalid column Cust_ProfileTbl_bintAccountNo

LINQ

DB context = new DB();
List<Cust_ProfileTbl> profile = context.profile.ToList();
var r = from ord in context.profile.Include("balance") 
        select ord;

模型

public class Cust_ProfileTbl   
{
    [Key]
    public long bintAccountNo { get; set; } 
    public virtual  BP_BalanceTbl balance { get; set; } 
} 
public class BP_BalanceTbl
{
    [Key] 
    public long bintAccountNo { get; set; } 
}

生成SQL

SELECT  
    [Project1].[bintAccountNo] AS [bintAccountNo], 
    [Project1].[Cust_ProfileTbl_bintAccountNo] AS [Cust_ProfileTbl_bintAccountNo]-- Invalid column
    FROM ( 
        SELECT 
            [Extent1].[bintAccountNo] AS [bintAccountNo], 
            [Extent2].[Cust_ProfileTbl_bintAccountNo] AS [Cust_ProfileTbl_bintAccountNo], 
        CASE WHEN ([Extent2].[intPartner] IS NULL) THEN CAST(NULL AS int) ELSE 1 END AS [C1]
        FROM  [dbo].[Cust_ProfileTbl] AS [Extent1]
        LEFT OUTER JOIN [dbo].[BP_BalanceTbl] AS [Extent2] ON [Extent1].[bintAccountNo] = [Extent2].[Cust_ProfileTbl_bintAccountNo]

    )  AS [Project1] 
ORDER BY [Project1].[bintAccountNo] ASC, [Project1].[C1] ASC 

我试图摆脱这个错误的事情

  1. 将1个身份PK列添加到BP_BalanceTbl中,(我不想这样做)
  2. 更改为使用加入方法。 (但我想知道为什么这不仅仅是逃避错误,以及如何避免这种情况?)

1 个答案:

答案 0 :(得分:1)

应OP的要求,我发表评论作为答案:

因此,问题是基于为主键和外键分配了模型属性这一事实。要告诉EF创建它,您需要在属性上使用DataAnnotations:

[Key, ForeignKey("Cust_ProfileTbl")]
public long bintAccountNo { get; set; } 

并且您可能还需要将相关实体作为虚拟财产引用:

public virtual Cust_ProfileTbl{get; set;}