MurabitoB

Entity Framework Identity 插入資料時自動獲得id

N 人看过

EntityFramework Identity 插入資料時自動獲得 id

環境

  • Visual Studio 2019
  • .Net Framework : 4.7.2
  • Entity Framework : 6.4.4
  • MySql.Data.EntityFramework: 8.0.18
  • DB : MariadDB

問題

在專案上有需要 MariadDB 的 Table 做資料維護,而 Database 是甲方爸爸開的,所以是必須以 Database First 的模式開發。

甲方爸爸的欄位皆以 int 做主鍵 id 並以 auto increment 做欄位的自動增值。

資料維護需要以 Ajax 的方式在新增之後馬上顯示在前端的頁面中,
被新增的資料有可能在同頁面中馬上被刪除,因此需要新增資料後要馬上取得該欄位的 id 並回傳給前端。

此外在插入資料的時候,並沒有直接指定值,而是由資料庫自動產生對應的 id,這就造成了無法知道生成的資料的 id。

解法

Entity Framework 會依照映射的模型有沒有 identity 欄位來決定新增後會不會自動取值回來。

可以透過 Entity Framework 的 Log 的 Action 去指定輸出生成的 SQL 語法用的 method 來觀察轉換出來的 SQL 語法

context.Database.Log = Console.WriteLine;

在 INSERT 後端包含了 SELECT 的語法,並且由於對應的資料庫是 MariadDB,所以輸出的 SQL CODE 中用到了 MySQL 的 last_insert_id()的函式,如果環境是對應到 Sql Server,那生成的 sql code 會變成 scope_identity()。

SELECT
`sid`
FROM `target_data`
WHERE  row_count() > 0 AND `sid`= last_insert_id()

參考資料:

https://blog.csdn.net/wangzl1163/article/details/52037714
https://dotblogs.com.tw/yc421206/2020/06/27/ef_insert_after_query_identity_field