我有一个应用程序,我想使用 FILESTREAM 功能来存储blob。我知道EF6不支持 FILESTREAM ,所以我将自己管理文件和图像处理。但是,我必须编写自己的初始化代码,以便将 FILEGROUP 和 FILE 添加到我的数据库中,并且:
public class CustomDbInitializer : CreateDatabaseIfNotExists<DatenbankContext>
{
public override void InitializeDatabase(DatenbankContext context)
{
base.InitializeDatabase(context);
SqlConnectionStringBuilder b = new SqlConnectionStringBuilder(context.Database.Connection.ConnectionString);
context.Database.ExecuteSqlCommand(TransactionalBehavior.DoNotEnsureTransaction,"ALTER DATABASE "+ b.InitialCatalog + " ADD FILEGROUP GRP CONTAINS FILESTREAM");
//more sql commands
}
}
然后,我手动调用函数 InitializeDatabase(context)
new CustomDbInitializer().InitializeDatabase(context);
然而,我发现这有点笨拙且反直觉。我知道我可以在构造函数中为上下文设置初始值设定项,但这不符合我的要求:
public class DatenbankContext : DbContext
{
public DatenbankContext()
:base("name=name")
{
Database.SetInitializer(new CustomDbInitializer());
}
}
基本上,我想要电话
new DatenbankContext() // or
context.Database.CreateIfNotExists()
以直观的方式使用我的自定义策略初始化我的数据库。怎么办呢?
答案 0 :(得分:0)
在自定义初始值设定项中添加:
var $modalContent = new Foundation.Reveal($('#modalContent'));
$modalContent.open();
在静态构造函数中调用初始化程序。这确保它只运行一次:
if (!context.Database.Exists())
{
context.Database.Create();
}
// Do next steps
有关自定义初始值设定项的详情,请参阅here。如果您想要控制该过程,您可能不想继承public class DatenbankContext : DbContext
{
static DatenbankContext()
{
Database.SetInitializer(new CustomDbInitializer());
}
}
。请参阅链接中的示例。