C# .Net Core Entity Framework 5如何将数据库插入一个不存在的实体,而该实体的一对多关系实体也不是';不存在吗?

C# .Net Core Entity Framework 5如何将数据库插入一个不存在的实体,而该实体的一对多关系实体也不是';不存在吗?,c#,entity-framework,insert,one-to-many,asp.net-core-5.0,C#,Entity Framework,Insert,One To Many,Asp.net Core 5.0,我正在处理一个项目,我基本上将这些实体映射到数据库,并配置了一对多关系 public class Order { public Order(){} public Order(List<OrderItem> orderItems) { OrderItems = orderItems; } public int Id { get; set; } pu

我正在处理一个项目,我基本上将这些实体映射到数据库,并配置了一对多关系

    public class Order
    {
        public Order(){}

        public Order(List<OrderItem> orderItems)
        {
            OrderItems = orderItems;
        }

        public int Id { get; set; }
        public List<OrderItem> OrderItems { get; set; }
    }


    public class OrderItem
    {
        public OrderItem(){}

        public OrderItem(int amount, int orderId, Order order, int productId, Product product)
        {
            Amount = amount;
            OrderId = orderId;
            Order = order;
            ProductId = productId;
            Product = product;
        }
        public int Id { get; set; }
        public int Amount { get; set; }
        public int OrderId { get; set; }
        public Order Order { get; set; }
        public int ProductId { get; set; }
        public Product Product { get; set; }
        
    }
此时,我想插入一个订单实例,该实例中添加了订单项,但之前未保存订单或订单项。在我插入订单后,我还希望将订单项与订单一起插入数据库,但我尝试了,但没有成功。当我阅读EntityFramework文档时,若从数据库中提取其中一个项目,那个么这是可能的,但我需要一次插入所有相关数据。通过事务可以做到这一点。例如,对于一个事务,我可以插入订单,然后我可以插入订单项目,但是是否有任何配置或其他东西可以使EntityFramework跟踪订单中的订单项目列表,具有一对多关系,并且在插入新订单时之前没有插入?

添加了注释的部件
[HttpPost]
覆盖公共异步任务Post(订单实体){
//entity.OrderItems=null;//我试图阻止异常
//entity.OrderItems[0]。Order=entity//我试图阻止1个列表元素出现异常
var db=新的EFMyFactory();
db.Orders.Add(实体);
db.SaveChanges();
/*这部分有效
var db=新的EFMyFactory();
var e=数据库条目(实体);
e、 State=EntityState.Added;
db.SaveChanges();
*/     
返回Ok();
}
这段代码没有例外,但WebAPI返回415,如下所示。不执行
db.Orders.Add(entity)
后面的行

{ “类型”:https://tools.ietf.org/html/rfc7231#section-6.5.13", “标题”:“不支持的媒体类型”, “地位”:415, “traceId:“00-7afc8f3ea707214b897d04a298f7b3a6-fc9689395692c54f-00” }

试试这个

        using (var Context = new TContext()) // getting appropriate context generic
        {
        var result = Context.Orders.Add(entity); // I've assumed that DBSet for your order table is Orders
        Context.SaveChanges();
        }

也许它不起作用。在
Context.Orders.Add(entity)
行之后,它抛出异常或其他内容,web api返回415个不支持的媒体类型。上述行之后的其他行不执行。我还尝试添加OrderItems proprety为null的Order实例,并将Order引用传递给OrderItems列表,但仍然出现错误。我需要查看API正文,请将异常详细信息放在此处编辑问题。亲爱的,我不知道您试图对代码做什么,因此它会引发您提到的异常,但是,我将尝试以我认为有用的方式重写代码
order.OrderItems=null;order.OrderItems[0]。order=order;//我不知道您试图在这里做什么,但它将抛出一个未设置为实例异常的引用\u context.orders.Add(order)_SaveChanges()我认为问题在于您的post请求主体,它必须是这样的:
{“orderItems”:[{“amount”:10,“product”:{“name”:“testnewproduct”}}}}
        [HttpPost]
        override public async Task<IActionResult> Post(Order entity){
           //entity.OrderItems = null; // I tried to prevent exception
           //entity.OrderItems[0].Order = entity // I tried to prevent exception with 1 list element
           var db = new EFMyFactory();
           db.Orders.Add(entity);
           db.SaveChanges();
           

           /* THIS PART WORKS
           var db = new EFMyFactory();
           var e = db.Entry(entity);
           e.State = EntityState.Added;
           db.SaveChanges();
           */     

           
           return Ok();
        }
        using (var Context = new TContext()) // getting appropriate context generic
        {
        var result = Context.Orders.Add(entity); // I've assumed that DBSet for your order table is Orders
        Context.SaveChanges();
        }