In tutti gli esempi che ho visto usare int32
s come ID. Non è sempre pratico negli ambienti di produzione. Molti dei nostri database hanno ID di identità che si trovano nel regno di int64
s, quindi la nostra pratica è di usare sempre a long
nostre proprietà di ID. Tuttavia, SQL Server ha valori massimi più elevati per il tipo di colonna int
.
Sto facendo il nostro primo proof of concept con Entity Framework versione 6. Con l' long ID
, non è in grado di mappare l'oggetto nel database.
Sto utilizzando API Fluent per tutte le mie mappe. In questo momento, sembra questo per l'ID:
Property(s => s.ID).HasColumnName("spcID");
Se aggiungo un .HasColumnType("int")
alla fine di quanto sopra, mi dà il seguente errore:
Lo schema specificato non è valido. Errori: (7,12): errore 2019: Mappatura membri specificata non valida. Il tipo "Edm.Int64 [Nullable = False, DefaultValue =]" del membro "ID" nel tipo "EFConnection.Space" non è compatibile con "SqlServer.int [Nullable = False, DefaultValue =, StoreGeneratedPattern = Identity]" del membro 'spcID' nel tipo 'CodeFirstDatabaseSchema.Space'.
Come si associa il tipo di dati per questi a una variabile lunga in .NET?
modificare
Al momento, ho configurato un semplice Test di integrazione per assicurarmi di poter connettere:
[TestMethod]
public void TestMethod1() {
using (var context = new Context()) {
Assert.IsTrue(context.Spaces.Any());
Assert.IsTrue(context.Spaces.First().IsActive);
}
}
Senza il .HasColumnType("int")
, il primo Assert passa, ma ottengo un InvalidOperationException
sul secondo:
La proprietà 'ID' su 'Spazio' non può essere impostata su un valore 'System.Int32'. È necessario impostare questa proprietà su un valore non null di tipo "System.Int64".
I tipi di dati C # e SQL sono compatibili:
Se la tua tabella ha una colonna di bigint
usa public long Id { get; set; }
se la tua colonna è int
usa public int Id { get; set; }
SQL
bigint -9,223,372,036,854,775,808
a 9,223,372,036,854,775,807
-2,147,483,648
a 2,147,483,647
C #
lungo -9,223,372,036,854,775,808
a 9,223,372,036,854,775,807
-2,147,483,648
a 2,147,483,647
Riferimenti: