簡體   English   中英

實體框架數據庫優先方法有條件地插入數據

[英]Entity Framework database-first approach conditionally insert data

使用實體框架,如果數據不存在,如何插入數據,如果存在則更新字段?

public class Rootobject
{
    public string odatacontext { get; set; }
    public Value[] value { get; set; }
}

public class Value
{
    public int AccountId { get; set; }
    public DateTime? SubmissionDate { get; set; }
    public string Status { get; set; }
}

要從我的 API 中檢索所有數據,我使用

root.value.Select(x => new satiaL
{ 
    accountID = x.AccountID,
    subDate = x.SubmissionDate,
    x_status = x.Status
});

這當然會插入所有記錄。

如果AccountID已存在於數據庫中,我想更新x_status的值,但如果AccountID尚不存在於數據庫中,那么我想插入所有值。

你不能。

Upsert 功能不是對象/關系 model 的一部分 - 對象是否存在,並通過身份進行跟蹤。 根本沒有“如果不存在就更新”的概念。 因此,EfCore 沒有什么可以實現的。

這聞起來像是濫用 ORM 作為 ETL 加載器,這不是您應該做的 - ETL(海量數據加載)不是什么,而 ORM 就是為此而生的。 是時候編寫自己的方法將數據向上移動到表中並可能在那里進行向上轉換。 幾年前做過,有時真的很方便。

現在您所能做的就是為每個帳戶運行大量查找並基本上編寫代碼:如果不存在則創建,如果存在則更新。

偽代碼:

var account = Find ( select ) or default from db
if account == null create
else update
savechanges

沿着這條線的東西。 注意性能 - 您可能只想構建加載所有帳戶。 當心有沖突的更新。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM