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.