Как вставить данные для отношения один ко многим между двумя таблицами в WPF c # с использованием Entity Framework? - PullRequest
0 голосов
/ 24 ноября 2018
try
{
    foreach (IEnumerable<string> row in itemgridshow.Items)
    {
        var valueslist = row.ToList();

        Order_Item oi = new Order_Item();
        oi.Item_Description = valueslist[0].ToString();
        oi.Item_Copy = int.Parse(valueslist[1].ToString());
        oi.Item_Price = int.Parse(valueslist[2].ToString());
        oi.Item_Amount = int.Parse(valueslist[3].ToString());
        oi.Item_Image = valueslist[4].ToString();

        neworder.Order_Item.Add(oi);

        db.Order_Item.Add(oi);
    }

    db.Order_Master.Add(neworder);
    db.SaveChanges();
}

Order_Master является первичной таблицей, а Order_Item является вторичной таблицей.Я хочу вставить Order_Master запись и множество Order_item сведений в одну операцию сохранения кнопки.

db - это имя контекста.

Для order_item данные передаются через сетку данных (itemgrid.items) в строковом массиве.

Все выглядит хорошо, и приведенный выше код не вызывает ошибок, но данные не вставляются в базу данных.Пожалуйста, помогите мне решить эту проблему.

1 Ответ

0 голосов
/ 24 ноября 2018

Я не вижу никаких проблем с логикой с фрагментом кода выше.

Попробуйте реструктурировать код, инкапсуляция использования контекста может раскрыть, почему сохранение не происходит.

    public void SaveOrder(IEnumerable<string> rows)
    {
        // Create a new order and add items
        var neworder = new Order_Master();
        foreach (var row in rows)
        {
            var valueslist = row.ToList();
            var oi = new Order_Item();

            oi.Item_Description = valueslist[0].ToString();
            // Set more properties...

            // Add the item to the order
            neworder.Order_Item.Add(oi);
        }

        // Instance a context, add the order and save
        try
        {
            using (var db = new OrderContext())
            {
                db.Order_Master.Add(neworder);
                db.SaveChanges();
            }
        }
        catch (Exception e)
        {
            throw new Exception($"Failed to save to database: {e.Message}");
        }
    }

Модель сущности должна выглядеть примерно так:

    public class OrderContext : DbContext
    {
        public DbSet<Order_Master> Order_Master { get; set; }
        public DbSet<Order_Item> Order_Items { get; set; }
        // More entities...
    }

    public class Order_Item
    {
        public int Id { get; set; }

        public string Item_Description { get; set; }
        // More properties...
    }

    public class Order_Master
    {
        public Order_Master()
        {
            Order_Item = new List<Order_Item>();
        }

        public ICollection<Order_Item> Order_Item { get; set; }

        public int Id { get; set; }

        public string Order_Description { get; set; }
        // More properties...
    }
...