Kod EF5 Najpierw: Wykryj, czy tworzy bazę danych, dzięki czemu mogę uruchamiać instrukcje ALTER
Jestem nowy w Entity Framework 5. Nasz zespół używaCode First
przepływ pracy.
Zanim zacznę od mojego głównego pytania,pozwólcie, że najpierw pokażę wam, co próbowałem (ostateczny komentarz wszechczasów: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
to klasa, którą stworzyłem, która dziedziczy zCBDContext
który zawiera metody nadpisywania, a także dziedziczy zDBContext
. Jednym z napotkanych przeze mnie problemów jest to, że struktura encji nie obsługuje wyjątkowości pola. Przeczytałem już artykuł na ten tematKonfigurowanie / mapowanie właściwości i typów za pomocą Fluent API na ich stronie i nie mogę znaleźć żadnej konfiguracji, aby ustawić właściwość na unikalną.
Tak więc, aby ustawić unikatowe pole, ręcznie uruchomiłem kilka instrukcji SQL ALTER podczas tworzenia,
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 ...
}
}
Moje pytania:
Czy mam rację, że ramy podmiotunie ma żadnych adnotacji dotyczących konfiguracji lub danych doustaw unikalne pole?Czy istnieje sposób wykrywania lub sprawdzania w czasie wykonywania, czy EF tworzy bazę danych, czy nie, więc mogę przenieść lub ukryć tę instrukcjęif (_context.Database.CreateIfNotExists())
gdzieś dostępnej metody, którą można zastąpić?Naprawdę chcę usunąćif (_context.Database.CreateIfNotExists())
z użyciem statemnta i umieść go gdzieś indziej lub w środkuMyDBContext
więc mój kod będzie wyglądał tak,
using (MyDBContext _context = new MyDBContext(connString))
{
Account _acc = new Account()
// ...Account properties ...
_context.Account.Add(_acc);
_context.SaveChanges();
}
Dzięki.