EF 代码第一个外键被忽略,得到 "Invalid column name"

EF code first foreign key ignored, getting "Invalid column name"

我有一个相当简单的 class,它包含潜在的用户类型:

public class Core_UserType
{
    [Key]
    public long ID { get; set; }
    [Required]
    public String Name { get; set; }    
    [ForeignKey("TrackingInfo")]
    public long ObjectID { get; set; }

    public virtual Core_TrackingInfo TrackingInfo { get; set; }
}

为简洁起见,我排除了一些代码,但关键 属性 是 TrackingInfo。该实体(以及整个代码优先实体模型位于名为 EntityModel 的 class 库中。

该解决方案有 2 个 Web 应用程序项目(均为 ASP.Net MVC),均引用此 class 库。

库本身有一些代码可以插入一些条目,其中一个是新的 Core_UserType。当从应用程序 A 调用时,它运行完美。问题是从项目 B 调用时,代码失败(在插入其他一些对象后):

An error occurred while saving entities that do not expose foreign key properties for their relationships. The EntityEntries property will return null because a single entity cannot be identified as the source of the exception. Handling of exceptions while saving can be made easier by exposing foreign key properties in your entity types. See the InnerException for details.

还有一个内部异常:

Invalid column name TrackingInfo_ID

我深入研究了堆栈轨道,发现项目 B 正在尝试执行此 SQL:

INSERT [dbo].[Core_UserType]([Name], [ObjectID], [TrackingInfo_ID])
VALUES (@0, @1, @2)
SELECT [ID]
FROM [dbo].[Core_UserType]
WHERE @@ROWCOUNT > 0 AND [ID] = scope_identity()

显然 TrackingInfo_ID 不存在(应该使用 ObjectID)所以它失败了。

问题是为什么项目 A 能够遵守 ForeignKey 属性而项目 B 不能?

您可以尝试以相反的方式执行此操作:这意味着另一个 属性:

上的 ForeignKey DataAnnotaion
public long ObjectID { get; set; }

[ForeignKey("ObjectID")]
public virtual Core_TrackingInfo TrackingInfo { get; set; }

希望对您有所帮助!