verwendetes Datenbanksystem: SQL2012 / SQL Azure
Hallo Leute
Situation
Einige Tabellen sind mit Default-Werten belegt. Diese haben ein PK - Auto-Increment welcher bei 0 startet. ( leider ist es zwingend das der Erste-Datensatz bei 0 beginnt ... )
Szenario
Ich erstelle ein EF-DB Context und möchte eine neu DB erstellen. ( Zeilen sagen mehr als 1000 Worte 😉) :
using (var db = new EntityFrameworkContext(connectionString))
{
var dbScript = db.ObjectContext().CreateDatabaseScript();
dbController.CreateDatabase(TestDbName);
dbController.ExecuteScript(dbScript, TestDbName);
}
Dies funktioniert auch wunderbar, nur :
=> Der Auto-Incerement PK startet immer bei 1, sprich die DB Einstellung wird nicht beachtet ?!
(Siehe Screenshot)
Bisher
... hab ich das so gelöst :
DBCC CHECKIDENT('TableName',RESEED,0)
Dies ist jedoch nicht möglich mit SQL Azure 😦
Hat mir jemand ein Tipp oder Idee ?
Beste Grüsse
Diräkt
Edit :
Ef generiert folgendes :
create table [dbo].[Culture] (
[CultureId] [int] not null identity,
[CultureName] [nvarchar](128) not null,
[Description] [nvarchar](128) not null,
[HtmlRemarks] [nvarchar](max) null,
[LastModified] [datetime2](4) not null,
[LastModifiedUserId] [int] not null,
primary key ([CultureId])
);
Edit 2:
Ich könnte es natürlich so lösen:
var dbScript = db.ObjectContext().CreateDatabaseScript().Replace("[int] not null identity,","[int] IDENTITY(0,1) NOT NULL,");
aber das ist erstens irgendwie sehr gammlig und zweitens starten dann alle Tables bei 0..., hoffe es gibt bessere Vorschläge 😃
Warum willst du bei 0 starten? 🤔
Wenn es nur darum geht, dass es irgendwo in den Weiten der Welt einige Objekte/Projekte gibt, deren IDs bei 0 starten und die zu diesen Einträgen in der Tabelle gehören, dann erweitere doch einfach die Tabelle um eine ProjektID.
Das sollte ja kein Problem sein und macht "fast" keinen Aufwand.
Das geht IIRC nicht ( richtig sauber (oder hat es sich mit den neuen EF Versionen geändert?).
Das EF erkennt mitunter anhand <KeyFieldName>=0
, dass die Entity noch nicht in der DB ist. Es wurde daher in den Anfangszeiten massiv davon abgeraten, irgendwelche Keys bei 0 beginnen zu lassen, da Seiteneffekte eben nicht ausgeschlossen werden konnte. Es gab sogar Probleme bei der automatischen Aktualisierung von NavigationProperties soweit ich mich erinnern kann.
- performance is a feature -
Microsoft MVP - @Website - @AzureStuttgart - github.com/BenjaminAbt - Sustainable Code
Hallo MATSE01
Gute Idee, werde ich in Erwägung ziehen 😃
Hallo Abt
Danke für Deine Antwort. Werde ich morgen testen 😃 Hab mich heute mit : EF CreateDatabaseScript Multiple Context IIS herumgeschlagen, und keine Lust mehr auf MS Technologien für heute 😃
Beste Grüsse
Diräkt