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