#c# #entity-framework #datatable
#c# #entity-framework #datatable
Вопрос:
ПРАВКА 2
Я снова обновляю вопрос, чтобы более просто объяснить, что мне нужно.
Мне нужно взять любой EntityObject в моем приложении, преобразовать его в XML, который позже может быть повторно преобразован обратно в объект, к которому можно запросить или использовать в источнике данных. Я не могу повторно преобразовать в исходный EntityObject, потому что структура этого объекта могла измениться. Выполнимо ли это?
Оригинальный вопрос ниже
Давайте предположим на секунду, что кто-то выше меня (потому что я такой и есть) требует, чтобы я взял EntityObject и преобразовал его в DataTable. Пример, который мне прислали о том, как это сделать, датирован 2006 годом и использует пользовательский класс (который, по мнению моего босса, был встроен в .Net), и он все равно не работает.
Есть ли способ сделать это без написания моего собственного пользовательского класса? Что-то такое простое, как «new DataTable(myEntityObject)» было бы потрясающе. Я предполагаю, что нет.
Редактировать
Я изменил вопрос, потому что мне неверно указали критерии. В основном мы хотим, чтобы наш EntityObject был XML, чтобы его можно было сохранить в базе данных и реконструировать позже. Можно ли это сделать с помощью сериализации?
Комментарии:
1. Вы хотите создать DataTable из одного объекта? Одна строка в таблице?
2. Да. Пожалуйста, просто не спрашивайте почему.
3. Я не думаю, что в фреймворке есть такая функция
4. Можете ли вы привести какой-нибудь пример? DataTable — это таблица, где еще EntityObject — это одна строка, как и чего вы хотите достичь, немного неясно.
5. Почему вы хотите сохранить entity в формате XML? Вы можете просто сохранить его с помощью EF.
Ответ №1:
Чтобы ответить на ваш обновленный вопрос: используйте XmlSerializer
public XElement XmlSerialize(object o)
{
XmlSerializer serializer = new XmlSerializer(o.GetType());
using (StringWriter sw = new StringWriter())
{
serializer.Serialize(sw, o);
return XElement.Parse(sw.ToString());
}
}
Комментарии:
1. Как только я это сделаю, могу ли я перестроить эти данные в DataTable? Причина, по которой я не буду возвращаться к EntityObject, заключается в том, что он мог измениться с момента сериализации.
2. Вам пришлось бы самостоятельно анализировать XML в DataTable
Ответ №2:
Нет, такого встроенного метода / класса нет. Вы должны написать свое собственное преобразование.
Ответ №3:
Для этого нужно написать класс конвертера, что-то вроде этого:
public DataRow ToDataRow<T>(T entity)
public DataTable ToDataTable<T>(IEnumerable<T> entities)