繁体   English   中英

实体框架核心不保存更改(没有主键,一个行表)

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM