Dot-Net
EF 4.1,程式碼優先:有沒有一種簡單的方法可以刪除所有約定?
我們可以通過這種方式刪除單個約定:
modelBuilder.Conventions.Remove<PluralizingTableNameConvention>(); modelBuilder.Conventions.Remove<ConcurrencyCheckAttributeConvention>(); // and 31 conventions more但我想念類似的東西
modelBuilder.Conventions.RemoveAll()。有沒有一種簡單的方法可以刪除所有這些?(我什至不確定我是否真的想最終刪除所有約定。但是隨著我不斷增長的對像模型,我很難清楚地區分映射到數據庫的哪些部分來自約定,以及我確實在 Fluent 中明確配置了哪些部分API。我認為目前我混合了基於純約定的映射、明確覆蓋的約定和明確複製的約定。至少出於學習目的和對映射的清晰理解,能夠關閉所有約定會很好。)
我只是用反射創建了一些解決方案:
public class Context : DbContext { private static IList<Type> _types = typeof(IConvention).Assembly.GetTypes() .Where(t => !t.IsAbstract && t.IsClass && typeof(IConvention).IsAssignableFrom(t)) .ToList(); private static MethodInfo _method = typeof(ConventionsConfiguration).GetMethod("Remove"); // DbSets ... protected override void OnModelCreating(DbModelBuilder modelBuilder) { base.OnModelCreating(modelBuilder); foreach (var type in _types) { MethodInfo method = _method.MakeGenericMethod(type); method.Invoke(modelBuilder.Conventions, null); } } }