[英]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.