Конвертировать строку базы данных в объект - PullRequest
0 голосов
/ 15 июня 2009

В моей базе данных есть таблица с 2 строками данных о сотрудниках.

...........

ID |  Name

...........

1 | Jon Doe

2 | Jane Doe

...........

Мне нужно это в моем коде, просто так, как код . Мне нужно преобразовать это в:

Employee e1 = new Employee();
e1.ID = 1;
e1.Name = "Jon Doe";

Employee e2 = new Employee();
e2.ID = 2;
e2.Name = "Jane Doe";

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

Это пример, почему он мне нужен, потому что у меня есть таблица, в которой хранятся настройки (ширина, высота, метка для сетки) и т. Д., Которые нужно установить на что-то в первый раз приложение работает.

Каким образом я могу это сгенерировать, есть ли какие-нибудь инструменты или как вы поступите?

Ответы [ 5 ]

9 голосов
/ 15 июня 2009

Обычный способ сделать это вне ORM - написать класс EmployeeFactory с методом .Create(), который принимает DataRow в качестве параметра и возвращает новый объект Employee.

Таким образом, вам не нужно «загрязнять» свой класс сотрудников кодом, чтобы сделать это, и вы можете поддерживать разделение проблем хорошим, проверяемым способом.

2 голосов
/ 15 июня 2009

Отредактировано Кажется, я неправильно понял ваш вопрос. Похоже, что вы хотите, это orm mapper, но на самом деле то, что вы ищете, это что-то вроде MyGeneration , которую вы можете указать на базу данных и заставить ее построить вам нужные вам объекты. Я оставляю остаток от первоначального ответа, так как ORM все еще полезен в этих ситуациях.

Есть несколько доступных для .Net, и если вы разрабатываете на .Net 3 или выше, чем у вас есть встроенный вызов Linq. Начало работы с Linq выходит за рамки этого ответа, так что вот замечательный пост от Скотта Гатри , в котором вы найдете его. Доступно еще одно предложение Microsoft под названием EntityFramwork, и дополнительную информацию об этом можно найти здесь

NHibernate - это бесплатный порт .Net платформы Hibernate, который также выполняет свою работу.

ORM-преобразователи делают преобразование данных базы данных в классы очень простым, но они идут с компромиссами. Для получения дополнительной информации см. Запись Википедия .

1 голос
/ 15 июня 2009

Почему бы вам не выбрать данные из базы данных в этом формате и сохранить их в файл?

Для mysql я бы сделал (и сделал):

Сохранить этот запрос как c: \ in.sql

SELECT CONCAT('Employee e', id, ' = new Employee();', char(13),
       'e', id, '.ID = ', id, ';', char(13),
       'e', id, '.Name = "', name, '";',
        char(13), char(13)) as '//generated' from employee;

и запустить из командной строки:

mysql -u root < c:\in.sql > c:\out.cs

Это выполнит запрос из in.sql и поместит вывод в out.cs в следующем формате:

//generated
Employee e1 = new Employee();
e2.ID = 1;
e2.Name = "...";


Employee e2 = new Employee();
e2.ID = 2;
e2.Name = "...";
0 голосов
/ 15 июня 2009

Существует много инструментов ORM (как предложил Cody C), которые будут генерировать код и выполнять сопоставление для вас. Но, судя по звучанию вопроса, я думаю, что это было бы излишним для вашего приложения. Если это все, что вам нужно, запустите ваш запрос с разрешенным доступом к данным (динамический sql, сохраненный процесс, представления и т. Д.), А затем просто сопоставьте значения возвращаемых данных с вашим объектом.

Это, конечно, не самое элегантное решение, но внедрение стороннего инструмента может потребовать больше.

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

Вы можете использовать что-то вроде Entity Framework, Linq2SQL, SubSonic, nHibernate и т. Д. Для генерации объектов на основе схемы вашей базы данных.

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