如何使用实体框架将相关实体添加到数据库

Posted

技术标签:

【中文标题】如何使用实体框架将相关实体添加到数据库【英文标题】:How to Add related entites to database using EntityFramework 【发布时间】:2021-08-14 15:37:41 【问题描述】:

我正在尝试将购物车添加到数据库,但不知道如何添加相关的Entities 我的相关表格是(cartsproductsproductoptionsoptions

如何同时添加或更新这些表?以及如何将外键设置为相关的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);

以上是关于如何使用实体框架将相关实体添加到数据库的主要内容,如果未能解决你的问题,请参考以下文章

我如何避免为实体框架添加哈希到我的实体名称

如何使用实体框架检索插入实体的 ID? [关闭]

如何使用实体框架代码优先从数据库中删除所有相关实体

如何使用实体框架和 MySQL 获取每个组的最新记录,包括相关实体

如何在现有远程数据库中添加表并将其链接到实体框架模型?

如何使用实体框架将大量数据延迟加载到 GridView [关闭]