Laden...

EF CreateDatabaseScript AutoIncrement Seed

Erstellt von Diräkt vor 10 Jahren Letzter Beitrag vor 10 Jahren 886 Views
D
Diräkt Themenstarter:in
615 Beiträge seit 2009
vor 10 Jahren
EF CreateDatabaseScript AutoIncrement Seed

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 😃

M
19 Beiträge seit 2012
vor 10 Jahren

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.

16.830 Beiträge seit 2008
vor 10 Jahren

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.

D
Diräkt Themenstarter:in
615 Beiträge seit 2009
vor 10 Jahren

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