我有一个旧数据库,该表的表只有一行,没有主键。当我尝试更新此行时,没有任何反应。我进行了很多搜索,找到了这行代码(dbf.Entry(nextPro).State = EntityState.Modified;)
。当我添加此代码时,出现错误:“无法跟踪'NxtId'类型的实例,因为它没有主键。只能跟踪具有主键的实体类型。”
我无法删除该行并添加新的行。我无法添加主键。我是唯一以某种方式更新行的选项。
var nextPro = dbf.NxtId.FirstOrDefault();
nextPro.ProductNo = 239071;
dbf.Entry(nextPro).State = EntityState.Modified;
dbf.SaveChanges();
实体:
public partial class NxtId
{
public int? ProductNo { get; set; }
public int? Uid { get; set; }
[Key]
public int? SatCode { get; set; }
}
答案 0 :(得分:2)
如果没有键,则无法使用Entity Framework跟踪或更改实体。但是,您仍然可以从数据库读取数据。另外,您可以使用扩展方法RelationalDatabaseFacadeExtensions.ExecuteSqlRaw()
运行定制的手动编写的SQL查询。用它发送普通的UPDATE
查询,然后再次从数据库中读取实体以获取新值。
dbf.Database.ExecuteSqlRaw($"UPDATE {nameof(NxtId)} SET {nameof(NxtId.ProductNo)} = ", 239071);
var nextPro = dbf.NxtId.Single();
答案 1 :(得分:0)
最适合我的代码(Entity Framework Core不喜欢与原始sql一起使用)。所以我不得不找到一个仍然有效的命令。
using (SqlConnection connection = new SqlConnection(Configuration["ConnectionStrings:Test"]))
{
SqlCommand command = new SqlCommand("UPDATE dbo.NxtID SET ProductNo =" + newProductNo, connection);
command.Connection.Open();
command.ExecuteNonQuery();
}