簡體   English   中英

如何在.net核心中插入具有自動遞增字段的實體而又不弄亂SQL Server'Identity_insert on'?

[英]How to insert an entity with autoincremented field in .net core without messing with SQL Server 'Identity_insert on'?

當我具有自動遞增的Id屬性(身份)時,將某些實體存儲在SQL Server數據庫中的最佳實踐是什么?

這是使用Entity Framework Core的.NET Core應用程序。 我想我可以創建一些沒有標識id新實體,然后將舊實體的值移動到新實體中,然后將其存儲在當前上下文的.Add方法中,或者執行命令以啟用'SET IDENTITY_INSERT ”,但是這兩種方法看起來都很混亂,我猜想有一種更干凈的方法可以實現這一目標。

//user has autoincremented property
public IEnumerable<User> SaveUser(User user)
{
     context.add(user);
     context.SaveChanges(); // Exception Cannot insert explicit value for identity column in table
}

我希望能夠以一種可以在整個應用程序中重用的方式來實現它,因為如果我的實體的大小不斷增加,那么我將不得不編寫這種混亂的代碼。

首先,我想問/指出您的模型課。 不確定在.net核心上如何使用EF,但是如果您要使用模型(先編碼還是先建模),

可以這么說,您的Entity模型如下所示:

User
{
    UserId (as int),
    UserName (as string),
    BirthDate (as date)
}

您可以通過以下方法實現身份插入:

public class User
{
    [Key]
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public int UserId {get;set;}

    public string UserName {get;set;}

    public DateTime BirthDate {get;set;}
}

請探索並了解代碼優先方法,對數據建模,存儲庫模式(在我看來,這可能是理想的選擇,但要視情況而定,或者是一個很好的學習方法),並查看EF模型的屬性,注釋修飾。

要通過上述注釋說明真正推動自動身份識別的因素,

  1. 身份生成(自動身份道具)

    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]

是驅動因素,還取決於數據類型。 一些數據類型可能需要其他參數配置。 探索何時嘗試解決方案。 例如,您可以使用Guid數據類型,並在Db中查看結果。

  1. 主鍵或鍵屬性

    [鍵]

與模型/實體結構中的主鍵字段一樣容易表示。 這可能無法幫助或運行自動標識,但是,我正在解釋為什么我在上面的示例代碼中添加了此屬性。

暫無
暫無

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

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