![](/img/trans.png)
[英]Entity Framework Core generating -ve integer values for Primary Key column on a table row add
[英]Entity Framework core doesn't save changes (no primary key, one row table)
我有一个遗留数据库,该表只有一行没有主键。 当我尝试更新这一行时,什么也没有发生。 我进行了很多搜索并找到了这行代码(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; }
}
当实体没有密钥时,您无法使用 Entity Framework 跟踪或更改实体。 但是,您仍然可以从数据库中读取数据。 此外,您可以使用扩展方法RelationalDatabaseFacadeExtensions.ExecuteSqlRaw()
运行自定义手动编写的 SQL 查询。 使用它发送一个普通的UPDATE
查询,然后再次从数据库中读取实体以获取新值。
dbf.Database.ExecuteSqlRaw($"UPDATE {nameof(NxtId)} SET {nameof(NxtId.ProductNo)} = {{0}}", 239071);
var nextPro = dbf.NxtId.Single();
适合我的代码(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();
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.