繁体   English   中英

EF代码的第一个外键被忽略,得到“无效的列名”

[英]EF code first foreign key ignored, getting “Invalid column name”

我有一个非常简单的类,其中包含潜在的用户类型:

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的类库中。

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

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

保存不公开外键属性为其关系的实体时发生错误。 EntityEntries属性将返回null,因为无法将单个实体标识为异常的来源。 通过在实体类型中公开外键属性,可以简化保存时的异常处理。 有关详细信息,请参见InnerException。

还有一个内部异常:

无效的列名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; }

希望这可以帮助!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM