Добавление данных в базу данных MS SQL из нескольких классов с помощью LINQ? - PullRequest
0 голосов
/ 08 июня 2009

Хорошо, поэтому я даже не уверен, с чего начать. Программирование на SQL довольно ново для меня.

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

Проблема: у меня есть несколько вложенных классов, и мне нужно иметь возможность добавлять классы в несколько таблиц в базе данных sql. Мне также не нужно добавлять данные, если они уже существуют.

--------------------------------------------------------------------------
- Products      - Build        - File      - FileDetail   - BuildFiles   -
--------------------------------------------------------------------------
- ProductID     - BuildID      - FileID    - FileDetailID - BuildFilesID -
- Product_Name  - Build_Number - File_Name - File_Size    - BuildID      -
-               - Build_Date   - File_Path - File_Version - FileID       -
-               - ProductID    - ProductID - BuildFilesID -              -
--------------------------------------------------------------------------

Мой класс похож, но не совсем то же самое. Так, например:

ProductProperties productProperties = new ProductProperties("Notepad","090706");
Product myProduct = new Product(productProperties);
FileDetails fileDetails = new fileDetails("Notepad.exe","20kb","1.0.0.0");
myProduct.AddFile(fileDetails);
FileDetails fileDetails2 = new fileDetails("Notepad.config","5kb","1.1.2.5");
myProduct.AddFile(fileDetails2);

Теперь мне нужно добавить детали в базу данных SQL.

Некоторые примечания об инструменте:

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

Вот где я застрял:

  • Так что мне нужно использовать существующий идентификатор продукта
  • Мне нужно создать детали сборки
  • Мне нужно добавить файл, если файл не существует, или получить существующий FileID, если файл уже существует
  • Затем мне нужно добавить определенные файлы в конкретную сборку (таблица BuildFiles)
  • Тогда мне нужно добавить детали файла

Так что почти все нужно, лол.

Проблема в том, что я не знаю лучшего способа для этого. Например, создать запрос для поиска идентификатора продукта для конкретного продукта, а затем использовать этот идентификатор продукта при добавлении строки в таблицу сборки?

Есть ли у меня отдельный метод проверки, существует ли файл для определенного продукта, и если нет, то добавить файл?

Затем, когда я делаю все это, я запрашиваю файл и сборку, чтобы получить buildID и FileID и добавляю сборку и файл в таблицу BuildFiles.

Затем, наконец, добавьте значения в таблицу сведений о файле с BuildFilesID, сначала запросив детали buildFiles для получения идентификатора?

Или я тут совершенно не прав?

Если у меня есть 20 000 файлов, которые могут иметь место, для этого будут сотни тысяч запросов, поэтому я волновался, что это будет немного медленно или безумно.

Любые идеи, предложения и примеры будут великолепны!

Ответы [ 2 ]

0 голосов
/ 09 июня 2009

Код Обезьяны,

Смотрите видео Хансельмана с 11:00 до 15:30, где он описывает, как создать репозиторий в стиле Роба Конери. Не беспокойтесь о окружающем ASP.NET MVC; Дело в том, что объект репозитория будет содержать ваши методы для добавления, удаления и определения, существует ли запись. Как только ваш репозиторий будет создан, вы сможете написать код, подобный следующему:

Repository repository = new Repository();
if (!repository.exists(myFileID))
{
   myFile = new File
   {
      File_Name = myFileName;
      FilePath = myFilePath;
      ProductID = productID;
   }
   myNewFileID = repository.AddFile(myFile);
}

Обратите внимание, что предполагается, что вы уже создали классы Linq to SQL для своих таблиц. Созданное вами хранилище будет основано на этих классах Linq to SQL.

Позже сегодня я выложу несколько примеров.

0 голосов
/ 08 июня 2009

Рассмотрите возможность использования простого объектно-реляционного сопоставления, например Linq to SQL . Он создаст для вас кучу этого скаффолдингового кода, который вы затем сможете использовать для реализации любой логики, которую захотите. Это значительно упростит вашу жизнь.

Лучший пример того, что я видел, это выступление Скотта Хансельмана о NerdDinner . Его обсуждение создания классов Linq to SQL начинается через 6 минут 30 секунд после начала выступления. Наблюдайте это примерно минуту, а затем перейдите к этой записи в блоге:

http://www.fryan0911.com/2009/05/what-is-linq-to-sql-introduction.html

Наконец, у Скотта Гатри есть отличная серия блогов на Linq to Sql по адресу:

http://weblogs.asp.net/scottgu/archive/2007/05/19/using-linq-to-sql-part-1.aspx

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