在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);
}
}
答案 0 :(得分:4)
如果您继承DropCreateDatabaseAlways
,则无法更改InitializeDatabase
逻辑,因为该方法不是virtual
。而不是直接继承DropCreateDatabaseAlways
实施IDatabaseInitializer
。