So markieren Sie die identity-Spalte ordentlich mit Entity Framework 6.1?
Ich habe viele Beiträge und Antworten zu so markieren Sie einen Bereich, wie die identity-Spalte. Viele von Ihnen sind veraltet und Zielen auf ältere Versionen von Entity Framework.
Einige Ressourcen, die mir sagen, dass ich ein Attribut auf dem Feld:
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int ID { get; set; }
Andere Ressourcen, die mir sagen, ich fügen Sie diesen code OnModelCreating
Methode:
modelBuilder.Entity<User>().Property(u => u.ID).HasDatabaseGeneratedOption(System.ComponentModel.DataAnnotations.Schema.DatabaseGeneratedOption.Identity);
Welche soll ich verwenden? Erster, zweiter, beide, spielt keine Rolle, oder etwas anderes?
- Entweder, Sie Ihre Wahl. Ich benutze eine Mischung aus den beiden: Attribute für einfache Dinge wie diese, und die
modelBuilder
für komplexere Szenarien die Attribute nicht decken. Sie sind beide gleichermaßen gültig, und Sie werden sehen, dass unter der Decke (EF 'Konventionen'), die Attribute werden verwendet, um zu sagen, diemodelBuilder
was zu tun ist. - danke. Ich denke, ich werde den Attribut-Ansatz, wie es führt zu saubereren code. Könntest du bitte posten Sie Ihren Kommentar als eine Antwort, so kann ich es akzeptieren?
- Ist diese Eigenschaft ein primary key?
- ja. Ich habe auch die
Key
Attribut (ich don ' T glaube, ich brauche es sowieso, wie der name der Eigenschaft istID
) - Sie brauchen nicht thoses Konfigurationen, weil ID ist primary key und numerischen Typ. Unten meine Antwort.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Solange der Typ des primary key-Eigenschaft numerisch oder GUID, die Erste Code wird per Konvention automatisch konfigurieren Sie den Schlüssel wie eine identity-Spalte.
Das bedeutet, dass Sie nicht brauchen, um eine der Konfigurationen, die Sie in Ihrem code, um ausdrücklich die Eigenschaft als identity-Spalte, da die Erste Code schon verwenden covention für, die. Die Daten-annotation Attribut oder eine fluent-API-Konfigurationen, die Sie legen, sind nutzlos.
Verwenden Sie diese Konfigurationen auf numerische oder GUID-Typs Primärschlüssel nur, wenn Sie wollen, deaktivieren Sie die Identität.
Dies ist für diejenigen, die Sie verloren mehr als zwei Stunden zu diesem Thema.
Habe ich einen Fehler gemacht, indem Sie die Markierung einer Spalte als SCHLÜSSEL, der später merke ich, es war nicht der Schlüssel, sondern nur eine Spalte.
Mein Modell hatte Abhängigkeiten, so konnte ich Sie nicht einfach entfernen Sie das Attribut KEY und lass es sein. Die Standard-Id-Spalte habe nie als identity-Spalte in SQL Server, entweder nach der Erzeugung der entsprechenden migration und Einstellung: Identität als wahr.
Statt, ich hatte zu entfernen die Dbset aus dem Kontext, entfernen Sie alle Verweise auf und von es an anderen Unternehmen. Und erzeugen, einer migration, dass die Tropfen, die Tabelle, dann die Festsetzung des Modell.. stellen Sie sicher, es war OK. Und dann erzeugen die gelungene Modell, einstecken in alle Abhängigkeiten zurück.
War es mein Fehler, auf der ersten Seite. Also ich habe keinen Körper Schuld, sondern mich.
Hoffe, niemand kommt zu dieser situation kommen, aber wenn dies geschieht, das, was ich getan habe.
Entweder, Ihre Wahl. Ich benutze eine Mischung aus den beiden: Attribute für einfache Dinge wie diese, und die
modelBuilder
für komplexere Szenarien die Attribute nicht decken. Sie sind beide gleichermaßen gültig, und Sie werden sehen, dass unter der Decke (EF 'Konventionen'), die Attribute werden verwendet, um zu sagen, diemodelBuilder
was zu tun ist.