Установка свойств EntitySet <t>по умолчанию с использованием отражения - PullRequest
0 голосов
/ 17 октября 2010

Я пытаюсь написать общий код для отключения класса linq. Что у меня сейчас есть:

public void Detach()
{
    this.PropertyChanged = null;
    this.PropertyChanging = null;

    this.Categories = default(EntitySet<Categories>);
    this.Jobs = default(EntitySet<Jobs>);
    this.Tasks= default(EntitySet<Tasks>);
}

Это все нормально, однако в моей базе данных есть несколько сотен таблиц, и это было бы трудоемкой задачей, чтобы сделать это специально для каждой из них. То, что я ищу, является чем-то общим, что я могу в значительной степени использовать для каждого определения класса, подобного:

public void Detach()
{
    this.PropertyChanged = null;
    this.PropertyChanging = null;

    foreach (System.Reflection.PropertyInfo _prop in this.GetType().GetProperties())
    {
        // if _prop is of type EntitySet<T> then set it to default(EntitySet<T>);
        // TODO: Complete the code here
    }
}

Я не уверен, как написать код для выполнения задачи, описанной в комментарии. Можно ли это сделать, или я пытаюсь сделать что-то, что просто невозможно сделать в текущей структуре?

Редактировать: изменил EntityRef на EntitySet.

1 Ответ

1 голос
/ 17 октября 2010

Самый простой способ сделать это - вызвать метод initialize, сгенерированный вашим .dbml с помощью отражения:

public void Detach()
{
  GetType().GetMethod("Initialize", BindingFlags.Instance | BindingFlags.NonPublic).Invoke(this, null);
} 

Чтобы сгенерировать метод Initialize, необходимо установить для свойства Serialization в файле dbml значение «Однонаправленный» (щелкните правой кнопкой мыши и выберите свойства, вы увидите это в инспекторе свойств).

И да, я чувствую вашу боль.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...