Sql server 实体框架查询映射问题
我遇到了一个奇怪的问题,EF实体生成了一个不正确的查询,而该查询正在生成反映导航属性映射的列。但是,我已经删除了这些导航属性,查询仍然会生成相关列。 有关实体如下所示Sql server 实体框架查询映射问题,sql-server,asp.net-mvc,entity-framework,asp.net-web-api,Sql Server,Asp.net Mvc,Entity Framework,Asp.net Web Api,我遇到了一个奇怪的问题,EF实体生成了一个不正确的查询,而该查询正在生成反映导航属性映射的列。但是,我已经删除了这些导航属性,查询仍然会生成相关列。 有关实体如下所示 [Table("Order")] public partial class Order { public int OrderId { get; set; } public int? OrderCampaignIDlink { get; set; } public int? OrderI
[Table("Order")]
public partial class Order
{
public int OrderId { get; set; }
public int? OrderCampaignIDlink { get; set; }
public int? OrderItemIDlink { get; set; }
[Column(TypeName = "date")]
public DateTime? OrderDateAdded { get; set; }
public int? OrderStatusIDlink { get; set; }
public int? OrderSupplierIDlink { get; set; }
}
public class Campaign
{
public Campaign()
{
Orders = new HashSet<Order>();
}
public virtual ICollection<Order> Orders {get;set; }
}
它通过DbContext
的子类映射
public partial class Entities3 : DbContext
{
public Entities3() : base("name=Entities3")
{
Configuration.LazyLoadingEnabled = false;
}
public virtual DbSet<Order> Orders { get; set; }
protected override void OnModelCreating(DbModelBuilder modelBuilder){...}
}
最后,下面是SQL Server Profiler报告的生成查询
SELECT
[Extent1].[OrderId] AS [OrderId],
[Extent1].[OrderCampaignIDlink] AS [OrderCampaignIDlink],
[Extent1].[OrderItemIDlink] AS [OrderItemIDlink],
[Extent1].[OrderDateAdded] AS [OrderDateAdded],
[Extent1].[OrderStatusIDlink] AS [OrderStatusIDlink],
[Extent1].[OrderSupplierIDlink] AS [OrderSupplierIDlink],
[Extent1].[Campaign_CampaignId] AS [Campaign_CampaignId],
[Extent1].[Company_CompanyId] AS [Company_CompanyId],
[Extent1].[OrderStatus_OrderStatusId] AS [OrderStatus_OrderStatusId]
FROM [dbo].[Order] AS [Extent1]
如您所见,select
查询中有一些列根本没有映射。正如查询中反映的那样,我以前有一些导航属性,但我已经将它们注释掉了
我尝试过的事情
- 刷新internet浏览器(Ctrl+F5)
- 正在IIS中停止、重新启动应用程序池
任何帮助都将不胜感激我想我会把答案留在这里,以备将来参考。事实上,这个问题相当简单和愚蠢。我忘了删除关系另一端对订单的引用。也就是说,我有一个
活动
实体,它仍然持有对订单
实体的引用,如下所示
[Table("Order")]
public partial class Order
{
public int OrderId { get; set; }
public int? OrderCampaignIDlink { get; set; }
public int? OrderItemIDlink { get; set; }
[Column(TypeName = "date")]
public DateTime? OrderDateAdded { get; set; }
public int? OrderStatusIDlink { get; set; }
public int? OrderSupplierIDlink { get; set; }
}
public class Campaign
{
public Campaign()
{
Orders = new HashSet<Order>();
}
public virtual ICollection<Order> Orders {get;set; }
}
公开课活动
{
公众运动()
{
Orders=新HashSet();
}
公共虚拟ICollection订单{get;set;}
}
与拥有
订单
实体集合的公司
实体相同。EF希望订单
实体上存在外键关系。删除该属性(以删除关系)或使用相应的外键将相应的活动
和公司
导航属性添加到订单
实体(以反映适当的一对多关系)应该消除错误。此代码中的内容:protected override void OnModelCreating(DbModelBuilder modelBuilder){…}您是否尝试过在项目中“查找”至少可能引用其中一列的位置?我猜它们是在其他地方被嵌入到你的物体中的。正如建议的那样,您可以发布ModelCreating事件代码吗?我不想让问题太过广泛,但忘了提到我删除了ModelCreating上的所有引用。现在,我已经发现了这个问题,稍后我会为来自谷歌的任何人发布答案,谢谢大家