EFCodeFirst - 初始化DB并创建表

时间:2011-09-14 10:00:20

标签: entity-framework entity-framework-4.1 ef-code-first


在EFCodeFirst方法中初始化数据库时,有没有办法通过SQL脚本创建表。 (我的意思是,为了避免自动创建表并使用我的自定义脚本instaead来创建表)。

我尝试过以下方法,但似乎并没有按照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 个答案:

答案 0 :(得分:4)

如果您继承DropCreateDatabaseAlways,则无法更改InitializeDatabase逻辑,因为该方法不是virtual。而不是直接继承DropCreateDatabaseAlways实施IDatabaseInitializer

相关问题