EFCodeFirst - инициализировать БД и создавать таблицы - PullRequest
1 голос
/ 14 сентября 2011


Есть ли способ создать таблицы с помощью сценария SQL, когда база данных инициализируется в подходе EFCodeFirst. (Я имею в виду, чтобы избежать автоматического создания таблицы и использовать мой собственный скрипт вместо создания таблицы).

Я попробовал следующий подход, но, похоже, он не создает таблицу согласно сценарию SQL. context.Database.ExecuteSqlCommand должен работать как для DDL SQL, так и для DML SQL.

class Class1
{

    public void InitializeDB()
    {
        Database.DefaultConnectionFactory = new SqlCeConnectionFactory("System.Data.SqlServerCe.4.0");

        var dbInitializer = new DbInitializer();
        Database.SetInitializer(dbInitializer);
        var target = new MyDbContext();
        target.Database.Initialize(true);
    }
}

public class DbInitializer : DropCreateDatabaseAlways<MyDbContext>
{
    private string CreateTableSQL = "CREATE TABLE [dbo].[UserLogins](" +
                         "[UserId] [int] IDENTITY(1,1) NOT NULL," +
                         "[UserName] [varchar](100) NOT NULL," +
                         "[FirstName] [nvarchar](200) NULL," +
                         "[LastName] [nvarchar](200) NULL )";

    public void InitializeDatabase(MyDbContext context)
    {
        context.Database.ExecuteSqlCommand(CreateTableSQL, string.Empty);
    }
}

1 Ответ

4 голосов
/ 14 сентября 2011

Если вы наследуете DropCreateDatabaseAlways, вы не можете изменить InitializeDatabase логику, потому что этот метод не virtual.Вместо наследования DropCreateDatabaseAlways реализуйте IDatabaseInitializer напрямую.

...