C# 如何使用EntityFramework向数据库添加相关的Entite

C# 如何使用EntityFramework向数据库添加相关的Entite,c#,sql,sql-server,entity-framework,asp.net-web-api,C#,Sql,Sql Server,Entity Framework,Asp.net Web Api,我正在尝试将购物车添加到数据库中,但不知道如何添加相关的实体 我的相关表格是(carts,products,productoptions,options) 如何同时添加或更新这些表?如何设置相关表的外键 谢谢…您将为每个表创建模型(见下文) 然后,如果您只添加了一个子项,则必须在填充foreig nkey属性的情况下添加它 var test = childObj { parentPropertyId = parentPropertyIdValue} 如果您将父项和子项添加到一起,您可以只添加

我正在尝试将购物车添加到数据库中,但不知道如何添加相关的
实体
我的相关表格是(
carts
products
productoptions
options

如何同时添加或更新这些表?如何设置相关
表的外键


谢谢…

您将为每个表创建模型(见下文)

然后,如果您只添加了一个子项,则必须在填充foreig nkey属性的情况下添加它

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; }
}
公共类推车
{
[关键]
公共int Id{get;set;}
public int Userid{get;set;}
公共日期时间CreatedDate{get;set;}
公共ICollection产品{get;set;}
}
公共类产品
{
[关键]
公共int Id{get;set;}
公共字符串序列号{get;set;}
公共字符串StockCode{get;set;}
公共int-CartId{get;set;}
公共整数数量{get;set;}
[外键(姓名(CartId))]
公共购物车{get;set;}
}
公共类产品选项
{
[关键]
公共int Id{get;set;}
public int ProductId{get;set;}
public int OptionId{get;set;}
[ForeignKey(name of(ProductId))]
公共产品产品{get;set;}
[外键(名称(选项ID))]
公共选项选项{get;set;}
}
公共类选项
{
[关键]
公共int Id{get;set;}
公共字符串名称{get;set;}
公共整数数量{get;set;}
public int ParentId{get;set;}
公共int祖父母ID{get;set;}
}

您可以遵循与此相关的Microsoft文档=>您不能同时更新多个表,DML语句只能影响一个表。您需要执行多个DML操作;每个表对应一个。您需要导航属性(请参阅)@Larnu我认为您的评论可能会混淆问题。一个SaveChanges的调用将进行上下文当前正在跟踪的所有更改。首先感谢您的回答。我使用Asp.NETWebAPI如何添加为嵌套。我要添加的代码如下:public IActionResult AddToCart(购物车、产品产品、产品选项ProductOption){var result=\u cartService.Add(购物车);}