![](/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.