C# 当我的列名与子表中的外键相同时,为什么EF生成无效列

C# 当我的列名与子表中的外键相同时,为什么EF生成无效列,c#,sql,entity-framework,linq-to-sql,C#,Sql,Entity Framework,Linq To Sql,我得到了这两个模型,我使用“include”来获取所有相关的实体,我的LINQ是这样的,当我执行它时,会抱怨--无效的列Cust\u ProfileTbl\u bintAccountNo LINQ DB context = new DB(); List<Cust_ProfileTbl> profile = context.profile.ToList(); var r = from ord in context.profile.Include("balance")

我得到了这两个模型,我使用“include”来获取所有相关的实体,我的LINQ是这样的,当我执行它时,会抱怨--
无效的列Cust\u ProfileTbl\u bintAccountNo

LINQ

DB context = new DB();
List<Cust_ProfileTbl> profile = context.profile.ToList();
var r = from ord in context.profile.Include("balance") 
        select ord;
生成的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 
我想除掉这个虫子的东西

  • 在BP_BalanceTbl中添加1个标识PK列(我不想这样做)
  • 更改为使用联接方法。(但我想知道为什么会发生这种情况,而不仅仅是逃避错误,以及如何避免这种情况?)

  • 应OP的要求,我将发表我的评论作为回答:

    因此,问题是基于这样一个事实,即模型属性同时被分配主键和外键。要告诉EF创建此属性,您需要在属性上使用DataAnnotation:

    [Key, ForeignKey("Cust_ProfileTbl")]
    public long bintAccountNo { get; set; } 
    
    public virtual Cust_ProfileTbl{get; set;}
    
    此外,您可能还需要将相关实体作为虚拟财产引用:

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

    在BP_BalanceTbl中,bintAccountNo不是FK吗?是的,bintAccountNo是外键。由于列太多,我们将表(Cust_Profiletbl)分为两个表。那么BP_BalanceTbl中的bintAccountNo我们也将其创建为PK。那么它既是PK又是FK?这不是问题的原因吗?是的。如果是1对1关系,会有什么问题。会有一个解决方案,快速搜索发现:您好,在第二行公共虚拟客户档案中应该是这样的:{get;set;},这也是foreignkey所需要的。:)谢谢