2011-03-21 153 views
2

任何人都可以告訴我將Entity Framework模型元數據保留在數據庫表中的真正好處嗎(它使用默認約定來執行此操作)?實體框架代碼第一關係映射問題

protected override void OnModelCreating(ModelBuilder modelBuilder) 
{ 
    modelBuilder.Conventions.Remove<IncludeMetadataConvention>(); 
} 

我可以把它關掉,我認爲它使得數據庫更清潔。但是這會對性能產生一些負面影響嗎?

我正在使用Code Only。

謝謝!

回答

1

這將創建包含當前模型的散列表的EdmMetadata表。每次創建衍生DbContext的實例並且您想訪問數據庫時,上下文都會執行特殊查詢以獲取存儲的散列。上下文然後將當前模型的哈希與檢索的哈希進行比較。如果散列值不同,它會執行數據庫初始化程序或觸發異常。當使用此功能,您可以例如定義初始化:

Database.SetInitializer(new DropCreateDatabaseIfModelChanges<MyComtext>()); 

這初始化將刪除數據庫和創建模式是否改變新的。它使代碼的第一次開發更加簡單,但它是您不能在生產中使用的東西。你也可以派生一個初始化器並創建一個自己的方法來覆蓋Seed方法。您可以使用Seed方法來初始化您的數據庫。

1

這對於應用程序的可擴展性和可維護性非常重要。它爲EF提供注意模式更改並相應地修改數據庫的功能。因此,您可以更改模型代碼,而無需擔心更新數據庫。

如果您確定自己永遠不會改變模型的結構,那麼您可以將其刪除。

+0

你能詳細說一下嗎?我使用Code Only,據我所知,Code Code Model的任何修改都意味着數據庫必須手動修改(或者在沒有數據的情況下重建),並且無論EF設置何時設置,代碼模型和數據庫模型不再同步。 – Jamie 2011-03-22 00:07:44