簡體   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