asp.net-core - EF Core 一对一 - 仅针对一条记录返回结果
问题描述
我面临这个问题几个小时,有人可以看看我做错了什么吗?
一对一关系仅返回一条记录的值,如果存在 idCategory = 2 的三个产品,则其中只有一个具有类别。我什至尝试过使用 CategoryId 而不是 idCategory,但仍然无法正常工作。
使用 EF Core 3.1.5 和 .NET Core 3.1,降级版本不能正常工作。
在产品类别中:
public int idCategory { get; set; }
[ForeignKey("idCategory")]
public virtual Category Category { get; set; }
在类别类中:
public virtual Product Product { get; set; }
此外,我无法将具有相同 idCategory 的 Products 中的两条记录添加到 DB 中,因此我插入了 OnModelCreating:
builder.Entity<Product>().HasIndex(e => e.idCategory).IsUnique(false);
和流畅的 API:
builder.Entity<Category>()
.HasOne<Product>(b => b.Product)
.WithOne(i => i.Category)
.HasForeignKey<Product>(b => b.idCategory);
在控制器中:
[HttpGet]
[Route("products")]
public IEnumerable<Product> GetProducts()
{
return products.GetProducts();
}
在产品存储库中:
public IEnumerable<Product> GetProducts()
{
return context.Products.Include(x => x.Category)
.Where(x => x.Category.IsActive == true && x.IsActive == true).ToList();
}
在配置服务中:
services.AddControllers().AddNewtonsoftJson(options =>
options.SerializerSettings.ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore
);
结果: JSON 结果 - 照片
^ 延迟加载也会发生同样的事情,但是第一条记录具有类别值,而第二条则没有
解决方案
你确定不是一对多的关系吗?如果我理解正确,您只想返回产品的类别,为什么不在“产品”类中添加此属性“CategoryId”并创建一个包含所有类别的其他类“类别”。像这样的东西:
类产品
public virtual Product Product { get; set; }
public Categories CategoryId { get; set; }
班级类别
public int Id { get; set; }
public ICollection<Product> Product {get; set;}
像这样,您可以为记录的每个产品添加一个类别。
您可以查看有关 Access Data 的 ASP Net Core 3.1 文档:
https://docs.microsoft.com/en-us/aspnet/core/data/ef-mvc/complex-data-model?view=aspnetcore-3.1
推荐阅读
- bash - 如何将环境变量从字符串传递到 bash 命令
- firebase - 意外删除 Firebase 数据
- sql-server - 在 SQL Server 存储过程中将参数设置为“可选”
- tensorflow - 无法在 Ubuntu 16.04 中配置 tensorflow 以使用 GPU 加速
- arrays - 如何返回提供的数组中包含单个项目的所有项目的数组
- php - 限制 jpg 和 pdf 上传的文件大小
- reactjs - 为什么 req.query 总是空的?
- html - 为什么悬停在 flex 或 grid 中不起作用?
- python - 无法在 Docker alpine 映像中安装 Psycopg2
- kotlin - 微调器和切换按钮的中性状态