2011-03-29 98 views
2

代碼首先是一個了不起的功能。但我無法弄清楚如何在不創建專門的DbContext的情況下堅持一個對象。它有可能嗎?我想看到沿着這些線的東西:的Code First - 堅持一個對象而專業的DbContext

 var dbConn = new SqlCeConnection("Data Source=Test.sdf"); 
     using (var db = new DbContext(dbConn, true)) 
     { 
      var cmp = new Company { CompanyName = "Microsoft" }; 
      db.Set(typeof(Company)).Add(cmp); 
      var recordsAffected = db.SaveChanges(); 

      Console.WriteLine(
       "Saved {0} entities to the database, press any key to exit.", 
       recordsAffected); 
      Console.ReadKey(); 
     } 

是否有可能動態註冊一個類創建模型?一定有辦法!

回答

1

沒有,因爲我知道沒有任何可能性沒有關於映射的任何信息來創建DbContext。需要使用預定義DbSets的專用上下文來定義映射和數據庫初始化。你也許可以使用基地的DbContext只有當你通過傳遞手動創建DbCompiledModel使用DbContext之前通過其構造提供有關映射的信息,但我沒有試過呢。

的問題是,DbSets和被覆蓋的OnModelCreating被用來推斷需要映射。如果你沒有DbSets或定義DbContextOnModelCreating不能推斷和緩存映射。映射元數據僅爲每種上下文類型創建和編譯一次(直到應用程序重新啓動)。這個操作被認爲非常緩慢。如果您沒有特定的上下文類型,EF無法推斷映射,即使可以,它也可能需要爲上下文的每個實例(如匿名類型)創建和編譯元數據。

如果使用DbCompiledModel手動創建這將是你的責任,重新使用。