如何从另一个表中获取数据并插入到 EF Core 中所需的表中
Posted
技术标签:
【中文标题】如何从另一个表中获取数据并插入到 EF Core 中所需的表中【英文标题】:How to get data from another table and insert into the required table in EF core 【发布时间】:2021-11-05 04:34:32 【问题描述】:这是 .NET 5 和 EF Core 5.0.9 版中的 webapi 项目。我正在使用 Swagger 测试这个 API。并且数据库是 SQLite。 我有 3 个表 Product、StockHeader 和 StockDetail。 StockHeader 和 StockDetail 是 一对多 关系。 产品表有这些列->
身份证 姓名 费率StockHeader 表有这些列->
HdrId 文档编号 签名 ICollection 类型的 StockDetailStockDetail 表有这些列->
身份证 HdrId(外键) 产品编号 费率所以,我的要求是,当我在 stockDetail 中输入 productID 的值时,它应该查找 Product 表,获取该特定 Id 的汇率并将其写入我的 StockDetails 汇率列。 我必须在 HttpPost 中执行此操作。 问题是 StockDetail 不应该有 Product 的任何引用属性。 如何在 EF Core 中实现这一点?
【问题讨论】:
StockDetail should not have any reference property of Product
为什么?该表显然有一个ProductId
字段,所以StockDetail
类可以(应该?)有一个Product
类。 EF 是一个 ORM,而不是 SQL 的替代品。它旨在将对象映射到关系表。对象有关系。
是的,我理解并接受你所说的。但是除了建立关系,我们还有什么方法可以完成任务吗?
为什么? 类是什么样的?无论如何,您必须加载Product
行,才能从数据库中获取Rate
。您可以使用 LINQ 查询仅按 ID 加载 Rate
,但即便如此,您仍然需要查询数据库
在 DbContext 中,您可以重写方法 SaveChange
,检索修改了 ProductID
的 StockDetail
s 并设置 Rate
。
@PanagiotisKanavos 没有特别的原因。我只是出于兴趣而问。
【参考方案1】:
在 stockdetail 类中添加一个简单的产品属性,在产品类中添加一个可枚举的属性... 并使用流利的 api 在您的上下文中添加一行,将 productId 与您的对象产品映射...
modelBuilder.Entity<Product>()
.HasMany<StockDetail>(s => s.stockDetaik)
.WithOne(ad => ad.Product)
.HasForeignKey<Product>(ad => ad.ProductId);
【讨论】:
感谢您的回答,但我的目标是获得没有任何关系的利率。 你需要做2个查询...一个用于获取产品,第二个用于插入和设置速率... 现在我不能我没有电脑...但是@ayankovv 是一样的...只有一件事使用 where 和 after firstordefault...【参考方案2】:好的,我猜你会将 productId 作为输入参数。您只需进行 LINQ 查询即可从 Products DbSet 获取所需的产品。
尝试:
var product = dbContext.Products.FirstOrDefault(x => x.Id == productId);
最好检查输入参数 (productId) 是否为有效 Id,这样您就可以这样写:
if(product == null)
throw new ArgumentException("Invalid ID", nameof(productId));
然后只分配速率,以便:
Rate = product.Rate;
【讨论】:
我会检查并回复你 它抛出错误“对象引用未设置为对象的实例”以上是关于如何从另一个表中获取数据并插入到 EF Core 中所需的表中的主要内容,如果未能解决你的问题,请参考以下文章
Linq,EF Core - 按一个字段分组并使用其他字段从其他表中获取数据列表
我想将表单中的数据插入到表中,然后从另一个表中选择另一个数据并使用 PHP 插入到第三个表中
ef core 如何一次从具有外键的不同表中获取数据? (数据库优先)