使用实体框架保存complexa数据

时间:2016-04-20 11:59:16

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

我希望每个人都使用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,因为无法将单个实体标识为异常源。通过在实体类型中公开外键属性,可以更轻松地在保存时处理异常。

1 个答案:

答案 0 :(得分:0)

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

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

阅读您的上一条评论,您无法拥有具有相同订单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;}
}