Net Core 2.0 Entity Framework. Quando provo a inserire dati utilizzando _context.UserTask.AddRange(userTasks)
, l' TaskID
non viene aggiornato dopo aver richiamato SaveChanges()
. Di seguito è riportato il codice che sto usando.
public partial class UserTask
{
public Guid TaskID { get; set; }
public string Text{get;set;}
}
var tasks = taskTexts.Select(s => new UserTask { Text="abc" });
_context.UserTask.AddRange(tasks);
await _context.SaveChangesAsync();
foreach(var n in notifications){
n.TaskID //This is not returning the actualID inserted on the DB
}
Di seguito è riportata la struttura della tabella
CREATE TABLE dbo.Task(
TaskID [uniqueidentifier] NOT NULL,
[Text] [varchar](200) NOT NULL
CONSTRAINT [PK_TaskID] PRIMARY KEY CLUSTERED
(
TaskID ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF,
ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
ALTER TABLE dbo.Task ADD CONSTRAINT [DF_TaskID] DEFAULT (newsequentialid())
FOR [TaskID]
GO
Qual è stata la causa del problema? Enumerables! Dai un'occhiata alla sezione EDIT nella mia domanda per la soluzione.
Sto usando Database First in EF 6, e dopo aver provato per un periodo di tempo, trovo una possibile soluzione.
Innanzitutto, controlla la tabella nel database, assicurati di aver definito la colonna 'ID' come un campo chiave primaria a incremento automatico, che può essere dichiarato utilizzando qualcosa di simile
ID int IDENTITY(1,1) PRIMARY KEY,
quando crei il tuo tavolo. Alcune informazioni correlate possono vedere qui1 o qui2 .
oppure puoi controllare le proprietà dei dati in IDE MSSQL come:
Secondo, imposta StoreGeneratedPattern della colonna 'ID' come Identità , puoi farlo aprendo il file edmx in Visual Studio, fai clic con il tasto destro del mouse sulla Colonna Dati nella tabella e seleziona Proprietà, e l'impostazione StoreGeneratedPattern è nella Finestra Proprietà:
Alcuni articoli correlati vedi qui .
Dopo aver completato le cose sopra, usando EF AddRange, l'ID si incrementa automaticamente e tutto funziona alla grande.
public class Entity
{
public long Id { get; set; }
public string Field { get; set; }
}
var entities = new Entity[]
{
new Entity() { Field = "A" },
new Entity() { Field = "B" },
};
_dbContext.Entities.AddRange(entities);