asp.net - 首先创建导航代码会导致错误:未声明具有名称的导航属性
问题描述
query.Include("Store_Location").Load();
抛出:
EntityFramework.SqlServer.dll 中出现“System.InvalidOperationException”类型的异常,但未在用户代码中处理
附加信息:指定的包含路径无效。EntityType“Model.Order”未声明名为“Store_Location”的导航属性。
我使用以下代码首先创建导航代码:
public partial class Order
{
public Nullable<int> Store_Location_ID { get; set; }
public virtual Store_Location Store_Location { get; set; }
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")]
}
public partial class Store_Location
{
public int ID { get; set; }
public virtual ICollection<Order> Orders { get; set; }
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")]
}
https://docs.microsoft.com/en-us/ef/ef6/fundamentals/relationships
我需要使用设计器吗?为了创建导航,我需要做些什么吗?
解决方案
如果您使用代码优先方法创建数据库,那么您的实体不应该是部分类。像这样定义它们:
public class Order
{
public int? StoreLocationId { get; set; }
public virtual StoreLocation StoreLocation { get; set; }
}
public class StoreLocation
{
public int Id { get; set; }
public virtual ICollection<Order> Orders { get; set; }
}
然后你应该创建一个 DbContext 类:
public class StoreDbContext : DbContext
{
public StoreDbContext(DbContextOptions<StoreDbContext> options) : base(options)
{
}
public virtual DbSet<StoreLocation> StoreLocations { get; set; }
public virtual DbSet<Order> Orders { get; set; }
}
创建上下文后,您可以使用 ef 命令创建数据库。您可以在此处阅读有关 ef 核心的更多信息:https ://docs.microsoft.com/en-us/ef/core/get-started/?tabs=netcore-cli
如果你像我上面那样定义你的类,你可以包括你的导航属性强类型如下:
query.Include(order => order.StoreLocation);
推荐阅读
- asp.net - Web API 中的 web.config 问题
- r - Pivot_wider 保持原始数据帧的长度
- amazon-ec2 - 如何使用 AWS Lambda 在特定 EC2 实例上运行 Shell 脚本?
- java - Spring Boot REST application; findBy method using foreign key
- java - 小胡子模板:使用固定大小的位置
- java - java中的selenium拖放操作
- python - 带有 X 和 Y 滚动条的 tkinter 画布不显示 y 滚动条或使用 CheckboxTreeview 填充框架
- powershell - 为什么 (return) 和 return 不同?
- php - 正则表达式 HTTP 响应标头
- java - Android Listview:尝试在空对象引用上调用虚拟方法“android.view.View android.view.View.findViewById(int)”