C# 使用实体框架的主键(数据库优先)

C# 使用实体框架的主键(数据库优先),c#,mysql,sql,entity-framework,client-server,C#,Mysql,Sql,Entity Framework,Client Server,我有两张桌子。它们是在MySQL中创建的,然后应用Database first方法(这意味着在VS中从MySQL导入数据库时,所有主键和导航属性都由实体框架本身设置)。这两个表通过主键(Id_Cus)连接(一对多)。 第一桌 namespace WcfRestFullService.Model { using System; using System.Collections.Generic; public partial class customer {

我有两张桌子。它们是在MySQL中创建的,然后应用Database first方法(这意味着在VS中从MySQL导入数据库时,所有主键和导航属性都由实体框架本身设置)。这两个表通过主键(Id_Cus)连接(一对多)。 第一桌

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; }
    }
}

在这里,我填写了第一个表格,一切正常,第一个表格已填写完毕

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();


        }

首先,尝试更好地命名变量和列名,它们很容易混淆

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();

首先,尝试更好地命名变量和列名,它们很容易混淆

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();

它不工作异常:“System.Data.Entity.Validation.DbEntityValidationException:'一个或多个实体的验证失败。有关详细信息,请参阅'EntityValidationErrors'属性。'“@kgijbijbijbijbijbijbijbijbijbijbijbijbijbijbijbijbijbijbijbijbijbijbijbijbijbijbijbijb,展开实体错误,查看丢失的信息。它不工作异常:“System.Data.Entity.Validation.DbEntityValidationException:'一个或多个实体的验证失败。有关更多详细信息,请参阅“EntityValidationErrors”属性。“@kчччччбббббббчббб