我有一个问题,使用实体框架更新'Card_Id'主键,但同样的事情适用于简单的sqlcommand .
我的db表是:
create table Bank_Detail(Card_Id bigint not null主键,Card_Type nvarchar(60)not null,Cvv bigint not null,UserName nvarchar(80),Months int not null,Years int not null,BankName_ID int not null foreign key(BankName_ID)references Bank_Name(Id))
当我使用此代码更新信息时,它可以正常升级'Card_Id',这是我的数据库的主键
using (SqlConnection con = new SqlConnection(CS))
{
SqlCommand cmd =
new SqlCommand("update Bank_Detail Set Cvv=@Cvv , Card_Id =@New_ID ,UserName=@Name,Months=@ExM,Years=@ExY where Card_Id = @Old_ID", con);
cmd.Parameters.AddWithValue("@Old_ID", Old_ID);
cmd.Parameters.AddWithValue("@New_ID", New_ID);
cmd.Parameters.AddWithValue("@Cvv", Cvv);
cmd.Parameters.AddWithValue("@Name", Name);
cmd.Parameters.AddWithValue("@ExM", ExM);
cmd.Parameters.AddWithValue("@ExY", ExY);
con.Open();
int val = cmd.ExecuteNonQuery();
errormessage.Text = "item Updated successfully";
}
但如果我使用实体框架而不是使用简单的sqlcommand,那么它会在升级'Card_Id'时引发异常
它说:“属性'Card_Id'是对象关键信息的一部分,无法修改 . ”
Bank_Detail customerRow = Grid1.SelectedItem as Bank_Detail;
Bank_Detail bankdetail = bct.Bank_Detail.Single(b => b.Card_Id == Old_ID);
bankdetail.Card_Id = customerRow.Card_Id;
bankdetail.Cvv = customerRow.Cvv;
bankdetail.UserName = customerRow.UserName;
bankdetail.Months = customerRow.Months;
bankdetail.Years = customerRow.Years;
bct.SaveChanges();
errormessage.Text = "item Updated successfully";
Note: 请不要混淆Old_ID . 用于存储我以前的Card_Id的全局变量:public long? Old_ID;
private void SeIndexChanged(object sender, SelectionChangedEventArgs e)
{
Bank_Detail customerRow = Grid1.SelectedItem as Bank_Detail;
if (customerRow != null)
{
Old_ID = customerRow.Card_Id;
}
}
Please Provide the solution If you have any other way to update the same key using Entity Framework