簡體   English   中英

在實體框架核心中使用“附加”作為Upsert

[英]Use “Attach” as an Upsert in Entity Framework Core

根據oneunicorn的說法

DbSet.Attach將圖形中的所有實體置於未更改狀態。 但是,如果實體具有存儲生成的鍵(例如,Identity列)並且未設置鍵值,則它們將處於“已添加”狀態。

我在“商店生成的密鑰”部分遇到了麻煩。 我的數據庫是在SMSS中創建的,並且我的表的ID列的類型為uniqueidentifier,而不是null。 它是主鍵。 但是如何告訴SMSS應該由商店生成? 當我運行導入時,C#會發現有關該信息嗎? (特別是,如果可能的話,我想對內存數據庫進行測試。)

使用alter table SQL語句設置列的默認值:

alter table myTable alter column myIdColumn default newid()

在c#方面,裝飾EF類以指示該列的值是自動生成的:

[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
Guid myIdColumn { get; set; }

當您在其中一個表中插入一行時,數據庫的ID列
表配置為自動生成新的GUID? 使用newid()或newsequentialid()嗎? 后者是更好的選擇,因為它索引更好。 非順序向導可能會影響插入重表中的性能。

這是具有存儲生成的Id列的表定義的示例。

CREATE TABLE [dbo].[MyTable] (
    [Id] [uniqueidentifier] NOT NULL PRIMARY KEY CLUSTERED CONSTRAINT [PK_MyTable_Id] DEFAULT (newsequentialid()) 
)

然后將像這樣指定EF模型...

[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public Guid Id { get; set; }

暫無
暫無

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

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