0

我使用實體框架代碼第一 ,也是我有數據播種代碼混淆產生的數據庫和播種

現在,當我跑我的應用我的數據庫獲取生成的,但不符合我的虛擬數據播種。 我必須再次運行實體框架以獲取所有數據。

任何想法爲什麼以及如何解決這個問題,所以我不必運行我的應用程序2x獲取數據庫和數據?

日Thnx

我的上下文定義文件是:

​​

這裏是我的種子文件

public class Configuration : DbMigrationsConfiguration<Context> 
{ 
    public Configuration() 
    { 
     AutomaticMigrationsEnabled = true; 
     AutomaticMigrationDataLossAllowed = true; 
    } 

    protected override void Seed(Context context) 
    { 
     GenerateTasks(context); 
     context.SaveChanges(); 
    } 

    private static void GenerateTasks(Context context) 
    { 
     if (context.Task.Any()) return; 
     context.Task.Add(new Task() { Name = "Received" });    
    } 
} 

和鉤來創建數據庫:

Database.SetInitializer(new MigrateDatabaseToLatestVersion<Context, Configuration>()); 
    var context = new Context(); 
    context.Database.Initialize(true); 
+1

顯示您的種子代碼和您的初始化代碼。 –

+0

@LadislavMrnka你是什麼意思的初始化代碼? – cpoDesign

+0

觸發數據庫創建的代碼。 –

回答

1

如果您的應用程序是一個ASP.NET之一,是一個獨立的裝配從數據層,那麼你就可以了,而不是配置像你這樣的初始化,直接將它配置在web.config中。也許這是你的問題的原因。

所以,如果它是一個ASP.NET應用程序,你可以嘗試以下方法:

(1)

評論了這一點:

Database.SetInitializer(new MigrateDatabaseToLatestVersion<Context, Configuration>()); 
var context = new Context(); 
context.Database.Initialize(true); 

(2)

在web.config中,在關閉之前的末尾插入此權利/配置標籤:

<entityFramework> 
<contexts> 
    <context type="**fully-qualified name of your context class**, 
       **assembly name of your context**"> 
    <databaseInitializer type="System.Data.Entity.MigrateDatabaseToLatestVersion`2[[**fully-qualified name of your context class**, **assembly name of your context**], 
           [**fully-qualified configuration type**, **assembly name of your context**, Version=1.0.0.0, Culture=neutral]], EntityFramework"/> 
    </context> 
</contexts> 

其中完全合格的配置類型與您遷移的配置類(像[...] Context.Migrations.Configuration)

我在自己的項目中使用這種配置方法,並且效果很好!

0

釷是真的。打電話context.Tasks.Find(1),然後它會擊中數據庫。 EF代碼優先使用這個技巧推遲每一件事。這種方式的應用程序的啓動時間似乎快得多。 (但實際上它不是!)

+0

何時何地需要使用調用命令:是在創建播種數據之前還是之後? – cpoDesign

+1

實例化dbContext,然後調用一個虛擬查詢。現在分貝初始化發生。否則它會被推遲。 – VahidN