一直存在的關於這一主題(Modifying an Entity Framework Model at Run-Time)討論相當位,但到目前爲止,我還沒有能夠找到一個很好的解決問題的辦法。我們目前有一個使用EF 4.0構建的模型,並且需要允許客戶將自定義字段添加到各個表中。目前我們已經用一些描述新屬性的通用表格解決了這個問題,但是我們發現解決方案表現不佳。修改在運行時的ORM模型
有誰知道的動態列添加到數據庫,並更新ORM,以反映在運行時的好辦法?
一直存在的關於這一主題(Modifying an Entity Framework Model at Run-Time)討論相當位,但到目前爲止,我還沒有能夠找到一個很好的解決問題的辦法。我們目前有一個使用EF 4.0構建的模型,並且需要允許客戶將自定義字段添加到各個表中。目前我們已經用一些描述新屬性的通用表格解決了這個問題,但是我們發現解決方案表現不佳。修改在運行時的ORM模型
有誰知道的動態列添加到數據庫,並更新ORM,以反映在運行時的好辦法?
在運行時更新EF以反映數據庫中的更改沒有好的,好的或可管理的方法。如果你真的有一個必須在運行時更改的數據庫,EF對你來說不是好工具。 EF是強類型的 - 對數據庫的每次更改都必須不僅反映在映射中,而且還反映在用於加載和保持數據的實體類中。
在運行時更改實體類總是會在運行時發送IL代碼的區域。如果您通過創建具有動態模塊和動態實體類型的動態裝配過程,您將面臨許多新挑戰:
dynamic
而不是實際類型=無編譯時檢查。當直接與EF進行交互時,繼承和接口將不會有用,因爲必須映射繼承(您不需要它),並且接口不被EF接受。dynamic
或ExpandoObject
,因爲它使用反射映射 - >在運行時動態實例必須是正確的類型,否則反射將無法正常工作。DbSet
或ObjectSet
的通用實例 - 您必須能夠動態地創建這些實例。泛型參數必須是映射到當前上下文的類型 - dynamic
在這種情況下不起作用,因爲它不是映射類型。您還是要在運行時改變EF?你目前的做法是正確的。簡單地調整它以獲得更好的性能,但要注意這些要求始終伴隨着性能成本 - 尤其是EF。
替代地使用與鏈接表中提到的最後一種方法 - 預定義的自定義字段的固定數量的直接在主實體。
感謝您的回答,我們將做一些分析,並看看是否有任何可加快的領域。我懷疑我們調用SaveChanges的次數可能太高。 –
我想這線程回答你的問題 的http://計算器。com/questions/4019895 /修改實體框架模型在運行時 –