C# 当我的列名与子表中的外键相同时,为什么EF生成无效列
我得到了这两个模型,我使用“include”来获取所有相关的实体,我的LINQ是这样的,当我执行它时,会抱怨--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")
无效的列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
我想除掉这个虫子的东西
应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所需要的。:)谢谢