实体框架6 SetInitializer DbContext不适用于SQL Server Express和SQL Server Compact

时间:2014-07-22 14:18:14

标签: c# sql-server entity-framework sql-server-ce sql-server-express

每次我的应用程序启动时,我都遇到了创建新数据库的问题。

我读过这篇文章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);
调用

,但看起来好像它们没有被执行。如前所述,它们都具有相同的上下文,但由不同的对象组成。

为什么只重新创建第一个数据库?

0 个答案:

没有答案