每次我的应用程序启动时,我都遇到了创建新数据库的问题。
我读过这篇文章Entity Framework Database.SetInitializer simply not working,但没有帮助。
这是我的代码:
public DatabaseContext(DatabaseType type) : base("name=" + type)
{
Database.SetInitializer(new DropCreateDatabaseAlways<DatabaseContext>());
}
我在打电话
Database.Initialize(true);
无论是真是假,都无效。
稍后在我的应用程序中,我也“使用”数据库,因此绝对应该调用初始化程序。
我通过“使用”打开上下文。即使我做了这样的交易:
database.RoleRepository.Insert(new Role());
database.Save();
它不起作用。
有趣的是,它适用于LocalDB
,但不适用于Compact Edition或SQL Server Express。我在同一个应用程序中使用所有三个数据库(项目需要这个),也许这就是错误?首先调用LocalDB
。
以下是我的连接字符串:
<connectionStrings>
<add name="LocalDB"
connectionString="Data Source=(LocalDb)\v11.0;Initial Catalog=Database.DatabaseContext;integrated security=True;MultipleActiveResultSets=True"
providerName="System.Data.SqlClient"/>
<add name="CompactEdition"
connectionString="Data Source=CompactEditionDB.sdf"
providerName="System.Data.SqlServerCe.4.0"/>
<add name="SQLExpress"
connectionString="Data Source=.\SQLEXPRESS;Initial Catalog=SQLExpressDatabase;User Instance=false;MultipleActiveResultSets=true;Integrated Security=SSPI"
providerName="System.Data.SQLClient"/>
</connectionStrings>
你知道为什么它只适用于LocalDB
吗?
编辑:
发现它只适用于第一个上下文/数据库,无论哪种类型都无关紧要。两种方法
Database.SetInitializer(new DropCreateDatabaseAlways<DatabaseContext>());
Database.Initialize(true);
调用,但看起来好像它们没有被执行。如前所述,它们都具有相同的上下文,但由不同的对象组成。
为什么只重新创建第一个数据库?