Secondo ununicorn ,
DbSet.Attach mette tutte le entità nel grafico nello stato Invariato. Tuttavia, le entità verranno inserite nello stato Aggiunto se dispongono di chiavi generate dal negozio (ad es. Colonna Identità) e non è stato impostato alcun valore chiave.
Ho problemi con la parte "chiavi generate dal negozio". Il mio database è stato creato in SMSS e la mia tabella ha una colonna Id di tipo uniqueidentifier, non null. È la chiave primaria Ma come posso dire a SMSS che dovrebbe essere generato dal punto vendita? E C # lo scoprirà quando eseguirò un'importazione? (In particolare, voglio fare test su un database in memoria, se possibile.)
Imposta il valore predefinito della colonna usando l'istruzione SQL della alter table
alterata:
alter table myTable alter column myIdColumn default newid()
Sul lato c #, decora la tua classe EF per indicare che il valore per quella colonna viene generato automaticamente:
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
Guid myIdColumn { get; set; }
Quando si inserisce una riga in una delle tabelle è la colonna Id del database
tabella configurata per generare automaticamente un nuovo guid? usando newid () o newsequentialid ()? Quest'ultimo è preferibile in quanto si indice meglio. I GUID non sequenziali possono influire sulle prestazioni nelle tabelle di inserimento pesante.
Ecco un esempio di una definizione di tabella che ha una colonna Id generata da un negozio.
CREATE TABLE [dbo].[MyTable] (
[Id] [uniqueidentifier] NOT NULL PRIMARY KEY CLUSTERED CONSTRAINT [PK_MyTable_Id] DEFAULT (newsequentialid())
)
Il modello EF verrà quindi specificato in questo modo ...
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public Guid Id { get; set; }