LINQ, пользовательские объекты, сериализация и ссылки на объекты - PullRequest
2 голосов
/ 10 июля 2009

В настоящее время я использую LINQ to SQL для извлечения данных, а затем заполняю свои пользовательские объекты запросами LINQ. Мои пользовательские объекты наследуются от базового класса, который использует атрибут IsReference = true в datacontract. Затем я беру свою иерархию объектов и сериализую ее в XML, который затем отправляется в службу.

Это работает, однако, в XML происходит то, что данные объекта повторяются для объектов по всему файлу. В XML-файле я хочу, чтобы, если у объекта были те же данные, что и у другого объекта того же типа (независимо от того, где он находится в дереве объектов), я бы хотел, чтобы у него была ссылка на этот первый объект и не повторять данные.

Мне нужно некоторое отслеживание объекта, и я не уверен, что его можно обработать на уровне LINQ DataContext или я создаю экземпляры своих собственных пользовательских объектов, если мне нужно отслеживать его на этом уровне, используя что-то вроде хеш-таблицы для каждого типа объекта .

Вот как выглядят мои занятия:

class Section1 { 
  public static MyClass GetClasses(int Id)
  {
    using (DataContext dataContext = new DataContext())
    {
      var result = from items in dataContext.Table
        where item.Id == Id
        select items;

      foreach (var entry in result)
      {
        MyClass myClass = new MyClass();
        myclass.Id = entry.Id;
      }
    }
   return myclass;
  }
}

Позже в моей программе я создаю другой список элементов того же типа, что и метод в другом классе, и я ожидаю, что некоторые результаты будут такими же, как в первом вызове:

Class2 {
  public static MyClass GetItemClasses(int ItemId)
  {
    MyClass myClass = new MyClass();

    using (DataContext dataContext = new DataContext())
    {
      var result = from items in dataContext.Table
          where item.Id == ItemId
          select items;

      foreach (var entry in result)
      {
        MyClass myClass = new MyClass();
        myclass.Id = entry.Id;
      }
    }
   return myclass;
  }
}

Выполнение этого успешно заполняет все мои объекты, которые я затем сериализую. Любые идеи о том, как я могу иметь ссылки в моем файле XML для тех объектов, которые повторяются?

Спасибо за любой вклад.

1 Ответ

1 голос
/ 11 июля 2009

Думаю, что я обновлю это, поскольку я нашел работоспособное решение.

Поскольку мои пользовательские объекты отделены от моего DataContext и не отслеживаются им, я пошел дальше и создал таблицу поиска для своих объектов, и я проверяю эту таблицу перед созданием нового объекта.

Это предоставило мне ссылки в XML-файле, за которым я следовал.

...