0

我是EF Code First的新手。如何使用SQL Server CE 4.0實現IDatabaseInitializer

我創建了一個DbContext的子類並添加了一些DbSets

我做了子類的DropCreateDatabaseAlways<MyContext>和實施的背景下,這裏就是我的背景是這樣的:

public class Context : DbContext 
{ 
    public Context() : base("Database") { } 

    protected override void OnModelCreating(DbModelBuilder modelBuilder) 
    { 
    Database.DefaultConnectionFactory.CreateConnection("System.Data.SqlServerCe.4.0"); 
    Database.SetInitializer(new DatabaseInitializer()); 
    } 

    public DbSet<NameEntity> Names { get; set; } 
    public DbSet<Case> Cases { get; set; } 
} 

我運行以下命令,檢查應用程序文件後,我沒有看到一個生成的數據庫:

public App() //App ctor 
{ 
    using (Models.Context context = new Models.Context()) 
    { 

    } 
} 

我錯過了什麼?

+0

用於SQL Server CE 4.0僅s的'.sdf'文件一旦你實際**儲存了**東西在裏面的時候會出現...... – 2012-01-18 08:09:27

+0

當你用上下文進行操作,訪問DbSet或進行一些插入/更新時,數據庫被創建和初始化。你有嘗試過這些嗎? – archil 2012-01-18 08:10:52

+0

我在DatabaseInitializer.Seed中做過,但從未調用過 – Shimmy 2012-01-18 08:14:56

回答

3

您必須強制EF以某種方式創建數據庫。

  • 使用上下文(或存儲東西,或讀點) - Seed操作不會在這種情況下也算數,因爲Seed執行數據庫初始化後,但你需要的東西來觸發初始化
  • :它可以這樣做手動強制初始化

例子:

context.Database.Initialize(false);