C# 财产';卡号';是对象的一部分';s键信息,无法修改。有人能告诉我为什么EF会这样吗
我在使用实体框架更新“Card_Id”主键时遇到了一个问题,但对于简单的sqlcommand,同样的问题也可以很好地解决 我的数据库表是: 创建表Bank\ U Detail(卡Id bigint not null主键,卡类型nvarchar(60)not null,Cvv bigint not null,用户名nvarchar(80),月份int not null,年份int not null,银行名称int not null外键(银行名称\U Id)引用银行名称(Id)) 当我使用此代码更新信息时,它可以很好地升级“Card_Id”,这是我数据库上的主键C# 财产';卡号';是对象的一部分';s键信息,无法修改。有人能告诉我为什么EF会这样吗,c#,.net,entity-framework,ado.net,sql-server-2012,C#,.net,Entity Framework,Ado.net,Sql Server 2012,我在使用实体框架更新“Card_Id”主键时遇到了一个问题,但对于简单的sqlcommand,同样的问题也可以很好地解决 我的数据库表是: 创建表Bank\ U Detail(卡Id bigint not null主键,卡类型nvarchar(60)not null,Cvv bigint not null,用户名nvarchar(80),月份int not null,年份int not null,银行名称int not null外键(银行名称\U Id)引用银行名称(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’是对象关键信息的一部分,不能修改。”
注意:
请不要与旧的\u ID混淆。它是用于存储我以前的卡\u ID的全局变量:
公众长?旧身份证
private void SeIndexChanged(object sender, SelectionChangedEventArgs e)
{
Bank_Detail customerRow = Grid1.SelectedItem as Bank_Detail;
if (customerRow != null)
{
Old_ID = customerRow.Card_Id;
}
}
如果您有任何其他方法使用Entity Framework更新同一密钥,请提供解决方案您想知道EF为什么这样做,还是想为代码中的限制找到合适的解决方法?是的。实际上,我也想用EF实现同样的功能,请帮助我了解为什么EF代码会显示此异常?
private void SeIndexChanged(object sender, SelectionChangedEventArgs e)
{
Bank_Detail customerRow = Grid1.SelectedItem as Bank_Detail;
if (customerRow != null)
{
Old_ID = customerRow.Card_Id;
}
}