2013-07-18 17 views
6

In meinen EF5-Code-First-Modellen funktioniert die Erstellung neuer Datensätze besser, wenn die Datenbank den Primärschlüssel festlegt. Ich verwende eine Guid für Primärschlüssel und wenn festgelegt ist, erstellt SQL Server immer uniqueidentifier.Behandeln des Primärschlüssels in Entity Framework 5 Code First

Dies verursacht jedoch Probleme, wenn ich versuche, die Datenbank anfänglich zu initialisieren. Wenn ich die Guid in meiner Startmethode festlegen, überschreibt SQL Server es. Wenn ich den Guid nicht setze, bekomme ich jedes Mal einen neuen Rekord. Was ist eine empfohlene Lösung, um die Datenbank mit voreingestellten Guids zu initialisieren und für meinen normalen Betrieb festzulegen?

Beispiel Klassenmodell:

[Key] 
[DatabaseGenerated(DatabaseGeneratedOption.Identity)] 
public Guid Id { get; set; } 
public RecordName { get; set; } 
public DateTime? Created { get; set; } 
public DateTime? Updated { get; set; } 

Beispiel Samen Methode:

var record = new Record() 
      { 
       Id = new Guid("3B80725E-9550-4933-807F-C2FAA0942225"), 
       RecordName = "New Record", 
       Created = DateTime.UtcNow, 
       Updated = DateTime.UtcNow, 
      }; 
context.Record.AddOrUpdate(record); 
context.SaveChanges(); 

Antwort

8

AddOrUpdate eine Überlastung, die Sie den Schlüssel

Von MSDN

So angeben können, müssen Sie um die Methode mit dem natürlichen Schlüssel zu versorgen:

context.Record.AddOrUpdate(c => c.RecordName, new Record() 
      { 
       RecordName = "New Record", 
       Created = DateTime.UtcNow, 
       Updated = DateTime.UtcNow, 
      }) 
+0

Ehrfürchtig. Ich kannte die zusätzliche Erweiterungsmethode nicht. Der natürliche Schlüssel funktioniert hervorragend für Updates. Mit [DatabaseGenerated (DatabaseGeneratedOption.Identity)] gehe ich leider davon aus, dass es keine Möglichkeit gibt, die GUID/ID für einen neuen Datensatz zu überschreiben? – roadsunknown

+0

Ich bezweifle es. Wenn ich die eingefügte ID während des Seedings brauche, mache ich das: var organization = new Organization {Name = "Demo"}; context.Organisations.AddOrUpdate (o => o.Name, Organisation); SeedMembership (organisation.ID); – Colin

Verwandte Themen