Мне нужно запросить таблицы, которые не были известны или не существовали во время компиляции, опубликовать таблицу через odata, а затем сделать ее доступной для клиента Silverlight для CRUD.

Было бы замечательно использовать PCO типа dynamic или ExpandoObject для достижения этого, но это, похоже, не работает (как и предполагалось).

Мне интересно, есть ли интерфейсы, которые позволили бы мне выполнять сопоставление типов и сериализацию на уровне строк, поэтому я бы динамически брал строку данных и возвращал ее значения на стороне сервера. Возможно, интерфейс для PCO для «помощи» или динамически созданный метод получения/установки свойств. Я также играю с динамическим созданием класса контекста во время выполнения, но это довольно уродливо.

Затем - на стороне клиента, что-то, чтобы сделать то же самое с каналом odata, у меня есть решение, но оно недостаточно красивое, чтобы поделиться с миром.

0
DougS 8 Апр 2011 в 13:54

1 ответ

EF не предлагает никакого «динамического» подхода, а также простого способа создать новую таблицу и добавить ее в сопоставление. Другой вопрос, насколько хорошо службы данных WCF могут работать с изменяющимися данными - я думаю, что это тоже не поддерживается.

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

0
Ladislav Mrnka 9 Апр 2011 в 02:09