如何使用实体框架将相关实体添加到数据库
Posted
技术标签:
【中文标题】如何使用实体框架将相关实体添加到数据库【英文标题】:How to Add related entites to database using EntityFramework 【发布时间】:2021-08-14 15:37:41 【问题描述】:我正在尝试将购物车添加到数据库,但不知道如何添加相关的Entities
我的相关表格是(carts
,products
,productoptions
,options
)
如何同时添加或更新这些表?以及如何将外键设置为相关的Tables
谢谢...
【问题讨论】:
你可以关注微软相关文档 => docs.microsoft.com/en-us/ef/core/saving/related-data 不能同时更新多张表,一条DML语句只能影响一张表。您需要执行多个 DML 操作;每张桌子一个。 你需要导航属性(见docs.microsoft.com/en-us/ef/ef6/fundamentals/relationships) @Larnu 我认为您的评论可能会混淆这个问题。一次调用 SaveChanges 将进行上下文当前正在跟踪的所有更改。 【参考方案1】:您将为每个表创建模型(见下文)
然后,如果您只添加一个孩子,则必须在填充外键属性的情况下添加它
var test = childObj parentPropertyId = parentPropertyIdValue
如果您将父母和孩子一起添加,您只需添加,实体 mework 将负责处理。例如:
var test = new parentObj
someProperty = someValue,
childProperty = new childObj
//here will not have to populate the parentPropertyId
查看上述表格的示例模型
使用 [Key] 属性指定您的主键
使用相关实体属性上方的 [ForeignKey] 属性来指定要用作外键的属性
使用 ICollection 访问对象的子对象
public class Carts
[Key]
public int Id get; set;
public int Userid get; set;
public DateTime CreatedDate get; set;
public ICollection<Products> Products get; set;
public class Products
[Key]
public int Id get; set;
public string SerialNumber get; set;
public string StockCode get; set;
public int CartId get; set;
public int Quantity get; set;
[ForeignKey(nameof(CartId))]
public Carts Cart get; set;
public class ProductOptions
[Key]
public int Id get; set;
public int ProductId get; set;
public int OptionId get; set;
[ForeignKey(nameof(ProductId))]
public Products Products get; set;
[ForeignKey(nameof(OptionId))]
public Options Options get; set;
public class Options
[Key]
public int Id get; set;
public string Name get; set;
public int Quantity get; set;
public int ParentId get; set;
public int GrandParentId get; set;
【讨论】:
首先感谢您的回答。我使用 Asp.Net WebAPI 如何添加嵌套。我要添加的代码如下:public IActionResult AddToCart(Cart cart, Product product, ProductOption productOption) var result = _cartService.Add(cart);
以上是关于如何使用实体框架将相关实体添加到数据库的主要内容,如果未能解决你的问题,请参考以下文章