EF5-Code zuerst: Ermitteln Sie, ob eine Datenbank erstellt wurde, damit ich ALTER-Anweisungen ausführen kann

Ich bin neu in Entity Framework 5. Unser Team verwendetCode First Arbeitsablauf.

Bevor ich mit meiner Hauptfrage beginne,lass mich dir zuerst zeigen, was ich versucht habe (der ultimative Kommentar aller Zeiten:D).

public class MyDBContext : CDBContext
{
    public MyDBContext() : base(connString) { }

    public MyDBContext(string connStr) : base(connStr) { }

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        // removes some conventions
        modelBuilder.Conventions.Remove<ManyToManyCascadeDeleteConvention>();
        // ........

        // model configurations which contains mappings
        modelBuilder.Configurations.Add(new AccountConfiguration());
        // ........

        // calls base OnModelCreating
        base.OnModelCreating(modelBuilder);
    }

    // list of all Entity
    public DbSet<Account> Account { get; set; }
}

MyDBContext ist die Klasse, die ich erstellt habe, von der erbtCBDContext das enthält Override-Methoden und die erbt auch vonDBContext. Eines der Probleme, auf die ich gestoßen bin, ist, dass das Entity-Framework die Eindeutigkeit von Feldern nicht behandelt. Ich habe den Artikel schon gelesenKonfigurieren / Zuordnen von Eigenschaften und Typen mit der Fluent-API auf ihrer Website und ich kann keine Konfiguration finden, um eine Eigenschaft in einzigartig zu setzen.

Um das Feld eindeutig zu machen, habe ich also mehrere ALTER-SQL-Anweisungen während der Erstellung manuell ausgeführt.

using (MyDBContext _context = new MyDBContext(connString))
{
    if (_context.Database.CreateIfNotExists()) 
    {
        _context.Database.ExecuteSqlCommand("ALTER TABLE Account ADD CONSTRAINT UQ_Account_AccountNumber UNIQUE(AccountNumber)");
        _context.Database.ExecuteSqlCommand("ALTER TABLE Account ADD CONSTRAINT UQ_Account_GUID UNIQUE(GUID)");
        // .... more on this in the following lines ...
    }
}

Meine Fragen:

Habe ich Recht mit diesem Entitätsrahmen?Keine Konfigurations- oder Datenanmerkungen zuSetze das Feld eindeutig?Gibt es eine Möglichkeit, während der Laufzeit zu erkennen oder zu wissen, ob EF eine Datenbank erstellt oder nicht, damit ich diese Anweisung verschieben oder ausblenden kann?if (_context.Database.CreateIfNotExists()) irgendwo zu einer verfügbaren Methode, die überschrieben werden kann?

Was ich wirklich möchte, ist zu entfernenif (_context.Database.CreateIfNotExists()) von der Verwendung statemnt und legen Sie es woanders oder im InnerenMyDBContext so wird mein Code so aussehen,

using (MyDBContext _context = new MyDBContext(connString))
{
    Account _acc = new Account()
    // ...Account properties ...

    _context.Account.Add(_acc);
    _context.SaveChanges();
}

Vielen Dank.

Antworten auf die Frage(2)

Ihre Antwort auf die Frage