Первичный ключ (сначала база данных) с использованием структуры объекта - PullRequest
1 голос
/ 14 апреля 2020

У меня есть 2 таблицы. Они были созданы в MySQL, затем был применен первый метод базы данных (это означает, что все первичные ключи и свойства навигации были установлены самой Entity Framework при импорте базы данных из MySQL в VS). Эти две таблицы связаны (один ко многим) первичным ключом (Id_Cus). 1-я таблица

namespace WcfRestFullService.Model
{
    using System;
    using System.Collections.Generic;

    public partial class customer
    {
        public customer()
        {
            this.dishesrankings = new HashSet<dishesranking>();
            this.orders = new HashSet<order>();
        }

        public int Id_Cus { get; set; }
        public string FirstName_Cus { get; set; }
        public string LastName_Cus { get; set; }
        public int PhoneNum_Cus { get; set; }
        public string Email_Cus { get; set; }


        public virtual ICollection<dishesranking> dishesrankings { get; set; }
        public virtual customerpreference customerpreference { get; set; }
        public virtual ICollection<order> orders { get; set; }
    }
}

2-я таблица

namespace WcfRestFullService.Model
{
    using System;
    using System.Collections.Generic;

    public partial class customerpreference
    {
        public int Id_Cus { get; set; }
        public int Id_Res { get; set; }
        public string Name_Dis { get; set; }
        public int Id_Type { get; set; }

        public virtual customer customer { get; set; }
        public virtual order order { get; set; }
        public virtual type_dishes type_dishes { get; set; }
    }
}

Здесь я заполняю первую таблицу, все работает правильно и первая таблица заполняется.

public void InsertCustomer(customer customerDataContract)
        {
            //MySQLEntities Cust = new MySQLEntities();
            customer cust = new customer();
            {
                cust.Id_Cus = Convert.ToInt32(customerDataContract.Id_Cus);
                cust.FirstName_Cus = customerDataContract.FirstName_Cus;
                cust.LastName_Cus = customerDataContract.LastName_Cus;
                cust.PhoneNum_Cus = Convert.ToInt32(customerDataContract.PhoneNum_Cus);
                cust.Email_Cus = customerDataContract.Email_Cus;
            };
            dc.customers.Add(cust);
            dc.SaveChanges();

Далее вверх это проблема. Первая таблица заполнена, но никакие значения не помещаются во вторую таблицу в поле Id_Cus. Насколько я понимаю, поскольку таблицы взаимосвязаны, я хочу, чтобы поле Id_Cus во второй таблице также заполнялось, когда это поле заполняется в первой таблице. Я пытался, как показано в коде ниже, но не удалось, не могли бы вы дать некоторые рекомендации?

 public void InsertCustomer(customer customerDataContract)
        {
            //MySQLEntities Cust = new MySQLEntities();
            customer cust = new customer();
            {
                cust.Id_Cus = Convert.ToInt32(customerDataContract.Id_Cus);
                cust.FirstName_Cus = customerDataContract.FirstName_Cus;
                cust.LastName_Cus = customerDataContract.LastName_Cus;
                cust.PhoneNum_Cus = Convert.ToInt32(customerDataContract.PhoneNum_Cus);
                cust.Email_Cus = customerDataContract.Email_Cus;
            };
            dc.customers.Add(cust);


            customerpreference custPref = new customerpreference()
            {
                Id_Cus = customerDataContract.Id_Cus,
                Id_Res = 0, // some value
                Name_Dis = null, // some value
                Id_Type = 0 // some value
            };
            dc.customerpreferences.Add(custPref);

            dc.SaveChanges();

            int k = Convert.ToInt32(cust.Id_Cus);
            customer custFromDb =(from n in dc.customers
                                  where n.Id_Cus == k
                                  select n).Include(c => c.customerpreference).First();


        }

1 Ответ

0 голосов
/ 14 апреля 2020

Во-первых, попробуйте лучше назвать имена переменных и столбцов, они довольно запутанные.

Не ясно, что такое первичные ключи и что такое внешние ключи в классе customerpreference. Я думаю, что основная проблема заключается в том, что вы пытаетесь вставить внешний ключ дочернего объекта до того, как родительский объект существует в базе данных

customer cust = new customer();
        {
            cust.Id_Cus = Convert.ToInt32(customerDataContract.Id_Cus);
            cust.FirstName_Cus = customerDataContract.FirstName_Cus;
            cust.LastName_Cus = customerDataContract.LastName_Cus;
            cust.PhoneNum_Cus = Convert.ToInt32(customerDataContract.PhoneNum_Cus);
            cust.Email_Cus = customerDataContract.Email_Cus;
            cust.customerpreference = new customerpreference()
             {
                Id_Res = 0, // some value
                Name_Dis = null, // some value
                Id_Type = 0 // some value
             };
        };
        dc.customers.Add(cust);
        dc.SaveChanges();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...