2013-03-14 7 views
5

Ich versuche, eindeutige Einschränkung einer Spalte durch fließende Konfiguration für Code zuerst zu erzwingen. Gibt es einen besseren Weg, als es in der Geschäftslogik implementieren oder etwas mit wie unterEF Code Erste fließende API definiere eindeutige Bedingung

context.ObjectContext.ExecuteStoreCommand("CREATE UNIQUE CONSTRAINT..."); 

Oder ich frage mich, ob es nicht möglich ist einzigartig constrain mit fließend Konfigurationen zu implementieren?

EDIT:

Es ist bestätigt, dass dies mit fließend Konfigurationen nicht möglich ist. Aber dann frage ich mich, was ist der beste Weg, dies zu tun? Und würde gerne wissen, warum EF dies nicht unterstützt.

+1

Das Team erwägt: http://entityframework.codeplex.com/workitem/299 – ErikEJ

Antwort

1

Ich habe dieses Problem vor

aufgetreten

es nicht eindeutig constrain mit fließend API implementieren.

so, Sie die Art und Weise verwendet wird, ist richtig!

+0

danke für die Antwort. Aber wenn ich es mit einem Befehl mache, hängt das von meiner Datenbankimplementierung ab. Das will ich nicht haben. – Geethanga

2

In diesem Beispiel können Sie sehen, wie ein eindeutiges Schlüsselattribut definiert und in einer Entität verwendet wird.

http://code.msdn.microsoft.com/windowsdesktop/CSASPNETUniqueConstraintInE-d357224a

+1

Danke für die Antwort Imran. Eigentlich ist es ein guter Weg, es zu tun. Aber am Ende wird eine herstellerspezifische SQL-Anweisung ausgeführt. Wenn ich also meine Datenbank in einen anderen Anbieter ändere, werde ich den Code ändern. Aber ich stimme zu, dass ich nur einen Platz ändern muss. – Geethanga

1

Dies ist möglich, mit DbMigrations ...

public override void Up() 
{ 
    CreateIndex("dbo.MyTableName", "MyColumnName", unique: true); 
} 
+0

Ja, in der Tat habe ich auch einen Blogeintrag geschrieben, auf dem Sie ihn hier finden können (http://goo.gl/Ks9HZI). Aber meine ursprüngliche Frage war, ob es einen Weg gibt, dies mit Fluent API zu tun. – Geethanga

+0

Das Problem beim Einfügen von benutzerdefiniertem Code in Migrationen besteht darin, dass Sie den Verlust dieses Codes riskieren, wenn Sie sich entschließen, Ihre Migrationen zu löschen/kombinieren/neu zu generieren. Ich schlage vor, alle Ihre Konfigurationen in den 'EntityTypeConfiguration'-Klassen zu behalten. Überprüfen Sie meine Antwort auf, wie man es: http://stackoverflow.com/a/25779397/111438. – niaher

1

Es kann mit einer benutzerdefinierten Erweiterung Methode erfolgen:

using System.ComponentModel.DataAnnotations.Schema; 
using System.Data.Entity.Infrastructure.Annotations; 
using System.Data.Entity.ModelConfiguration.Configuration; 

internal static class TypeConfigurationExtensions 
{ 
    public static PrimitivePropertyConfiguration HasUniqueIndexAnnotation(
     this PrimitivePropertyConfiguration property, 
     string indexName, 
     int columnOrder = 0) 
    { 
     var indexAttribute = new IndexAttribute(indexName, columnOrder) { IsUnique = true }; 
     var indexAnnotation = new IndexAnnotation(indexAttribute); 

     return property.HasColumnAnnotation("Index", indexAnnotation); 
    } 
} 

Überprüfen Sie die vollständige Antwort hier : https://stackoverflow.com/a/25779348/111438

+0

Wie wäre es mit 2 Spalten, die zusammen einen einzigartigen Schlüssel bilden? –

Verwandte Themen