«Лучший» подход к игнорированию классов при первом использовании кода и структуры сущностей - PullRequest
1 голос
/ 09 августа 2011

В настоящее время я делаю следующее, чтобы удалить все классы EF, которые я не хочу включать.Но это означает, что я должен перечислить все классы.

 protected override void OnModelCreating(DbModelBuilder AModelBuilder)
{
    // Remove any classes that we don't want in the database. These are our derived classes
    AModelBuilder.Ignore<TCompetition>();
    AModelBuilder.Ignore<TCompeitionLadder>();
    AModelBuilder.Ignore<TCompeitionPersonRole>();
    AModelBuilder.Ignore<TCountry>();
    AModelBuilder.Ignore<TSport>();
    AModelBuilder.Ignore<TVenue>();
}

Поэтому вместо этого я подумал, что буду использовать отражение, чтобы получить список типов в сборке, а затем удалить все ссылки на классы, которые я не хочу включать,Однако я не могу заставить это работать, поскольку объект Type не является ожидаемым ссылочным типом класса, необходимым для Ignore ().Кто-нибудь может указать мне правильное направление, пожалуйста?

 protected override void OnModelCreating(DbModelBuilder AModelBuilder)
{
     // Remove any classes that we don't want in the database. These are our derived classes
    Assembly objAssembly = Assembly.GetExecutingAssembly();
    foreach (Type objType in objAssembly.GetTypes())
    {
        if (objType.BaseType.FullName.StartsWith("TEntityFramework", true, null))
        {
            AModelBuilder.Ignore<objType>();
        }
    }
}

1 Ответ

1 голос
/ 09 августа 2011

Использовать отражение для вызова универсальной функции,

Вместо написания этого:

AModelBuilder.Ignore<objType>();

Напишите это:

MethodInfo method = typeof(DbModelBuilder).GetMethod("Ignore");
MethodInfo generic = method.MakeGenericMethod(objType);
generic.Invoke(AModelBuilder, null);
...