【问题标题】:Save complexa data using entity framework使用实体框架保存复杂数据
【发布时间】:2016-04-20 11:59:16
【问题描述】:

大家好,我想使用Entity FrameworkC# 保存复杂数据。我有 2 个类 ProductOrder 定义如下

产品类别

public class Product 
    {
        [Key]
        public int Id { get; set; }
        public string SKU_Code { get; set; }
        public string Product_Name { get; set; }
        public string Quantity { get; set; }
        public string Price { get; set; }
        public string Image { get; set; }
        public DateTime Created_Date { get; set; }
        public DateTime Modified_Date { get; set; }
    }

订单类

public class Order
    {
        [Key]
        public long ID { get; set; }
        public string Order_Id { get; set; }
        public string Payment_Type { get; set; }
        public string Customer_Name { get; set; }
        public string Shipping_Address { get; set; }
        public DateTime Order_Date { get; set; }
        public DateTime Modified_Date { get; set; }
        public bool Flag { get; set; }
        public List<Product> ProductDetails { get; set; }
    }

我想保存数据订单详情,我的一段代码如下。

public Order Add(Order odrerDetails)
{
    using (var context = new EcommerceDBContext())
    {
        var MyOrder_Id = Helper.Random(7); //Generate random orderID from my class
        foreach (var detail in odrerDetails.ProductDetails)
        {
            odrerDetails.Order_Id = MyOrder_Id;                  
            odrerDetails.Quantity = Convert.ToInt32(detail.Quantity);
            odrerDetails.Amount = Convert.ToDouble(detail.Price);

           //Other Details
            context.objOrderListing.Add(odrerDetails);
        }                
        context.SaveChanges();
        return odrerDetails;
    }
}

这给了我完美的数据,但是当涉及到 context.SaveChanges(); 它返回的是我的错误。

保存不为其关系公开外键属性的实体时发生错误。 EntityEntries 属性将返回 null,因为无法将单个实体标识为异常源。通过在实体类型中公开外键属性,可以更轻松地处理保存时的异常。

【问题讨论】:

  • 什么是 Add_Product?
  • 错字只有Product
  • 复杂的数据,呵呵:)
  • Orders 实体的 ProductDetails 属性上没有外键属性
  • @SabyasachiMishra 我认为你把整个 Add 方法弄错了。我想这个想法是你有一个产品列表,你想将订单保存在数据库中,订单中有多个产品?根据您的代码,您正在添加多个订单。

标签: c# asp.net-mvc entity-framework entity-framework-6


【解决方案1】:

对我来说,你的域模型似乎全错了。订单应该只用于分组,这是一个典型的电子商务场景。

当您收到购买的收据时,您会收到一张收据,收据旁边会列出每件商品和价格。它被认为是多个事物的一个顺序,而不是多个事物的多个顺序。

阅读您的最后一条评论,您不能有多个具有相同订单 ID 的订单。在尝试用代码解决它之前,先尝试了解该领域。此外,您不知道有订单的客户。

public class Product 
{
    [Key]
    public int Id { get; set; }
    public string SKU_Code { get; set; }
    public string Product_Name { get; set; }        
    public string Price { get; set; }
    public string Image { get; set; }
    public DateTime Created_Date { get; set; }
    public DateTime Modified_Date { get; set; }
}

public class Order
{
    [Key]
    public long ID { get; set; }
    public string Order_Id { get; set; }
    public string Payment_Type { get; set; }
    public string Customer_Name { get; set; }
    public string Shipping_Address { get; set; }
    public DateTime Order_Date { get; set; }
    public DateTime Modified_Date { get; set; }
    public bool Flag { get; set; }
    public List<OrderLineItem> Items { get; set; }
}

public class OrderLineItem
{
    [Key]
    public long ID { get; set; }
    public long Order_Id { get; set; }
    public long Product_Id {get; set;}
    public int Quantity {get; set;}
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-08-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多