Можно ли включить код, основанный на существовании класса? - PullRequest
1 голос
/ 21 октября 2011

Я создал генератор кода для нашего проекта, чтобы сгенерировать множество наших стандартных операций и базовые объекты dataAccess для нашей базы данных.(мы не используем некоторые другие инструменты, потому что нам не разрешают выполнять динамический sql и нам разрешают только хранимые процессы).

Я сейчас думаю о том, что у нас ~ 1200 таблиц.Я не хочу включать каждый объект таблицы в наш проект (пока он не будет фактически использован).

Мои объекты содержат свойство, которое ссылается на другие объекты (например, отношения родитель / потомок).

Скажем, у меня есть 2 моих объекта (они находятся в разных файлах)

public class ClassA{
  public ClassB GetClassBforA{get;set;}
  //Lost of other properties and code
}

public class ClassB{/* bunch of stuff*/}

Теперь я знаю, что никто не использует ClassB в настоящее время, и я не хочу включать в наш проект (пока) потому что у него много ссылок на другие классы и инструменты.Я хотел бы, чтобы свойство ClassA не компилировалось.(поскольку этот файл генерируется автоматически, он обязательно перезаписывается)

Возможно, я думал о чем-то подобном

public class ClassA{
  #if ClassBIsDefind
  public ClassB GetClassBforA{get;set;}
  #endif
  //Lost of other properties and code
}


#define ClassBIsDefind
public class ClassB{/* bunch of stuff*/}

Но это не работает, потому что ClassBIsDefind установлен в другомфайл.

Есть ли другой способ сделать это?

Ответы [ 3 ]

1 голос
/ 21 октября 2011

Вы можете определить условные символы компиляции кода на вкладке «Построение» на странице свойств проекта в Visual Studio или с помощью переключателя командной строки, если вы вызываете компилятор в командной строке.Эти символы доступны для всех файлов.

1 голос
/ 21 октября 2011

Генерировать код только для таблиц, которые используются .

0 голосов
/ 21 октября 2011

Вы можете загрузить тип динамически, вызвав Activator.CreateInstance(), и перехватить исключение, которое происходит, если тип не существует.

...