EF 4.1, Code-First: Есть ли простой способ удалить ВСЕ соглашения?
Мы можем удалить отдельные соглашения таким образом:
modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
modelBuilder.Conventions.Remove<ConcurrencyCheckAttributeConvention>();
// and 31 conventions more
Но я скучаю по чем-то вроде modelBuilder.Conventions.RemoveAll()
. Есть ли простой способ удалить ВСЕ из них?
(Я даже не уверен, действительно ли я хочу окончательно удалить все соглашения. Но с моей растущей объектной моделью я затрудняюсь четко различать, какие части отображения в БД происходят из соглашений и какие части, которые я действительно сконфигурировал явно в Fluent API.Я думаю, что в настоящее время у меня есть сочетание чисто основанного на конвенции сопоставления, явно переписанные соглашения и явно воспроизведенные соглашения. По крайней мере, для целей обучения и чистого понимания отображения было бы неплохо иметь возможность отключать ВСЕ соглашения. )
Ответы
Ответ 1
Я просто создаю какое-то решение с отражением:
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);
}
}
}