Deutsch
Germany.ruФорумы → Архив Досок→ Программирование

.Net - DataSet... с динамическими таблицами

14.07.09 13:24
.Net - DataSet... с динамическими таблицами
 
Murr коренной житель
Murr
Снова хочется необычного...
Как все должно быть знают, в .Net DataSet создается таким каким он описан в его схеме.
Поверх этого накладывается всякая мелочь написанная прогерами... времени на это
убивается столько, что охота все бросить... особливо, если база еще не до конца
спроектирована, а таблицы используются в нескольких датасетах...
В .Net есть утилитка xsd.exe слегка упрощающая жизнь - по предоставленной схеме
может сгенерить тот код, что предоставляет Студия при создании датасета. Схему,
в большинстве случаев, можно выгрузить какой-нибудь тулузкой... В прочем, в ситуации
с меняющейся базой это все одно достаточно неприятно...
Думаю, что избежать большинства неприятностей с меняющейся базой можно если
сделать врапер к датасету, полностью изолирующий сам датасет и предоставляющий
интерфейсы в терминах задачи(базы?).
Что-то типа такого (от балды):
База:
таблица Order
- IDs PK;
- ClientID FK;
- ItemID FK;
- Qty int;
таблица Goods
- IDs PK;
- Description string;
- Notes text;
таблица Clients
- IDs PK;
- Name string;
- Shurename string;
- DateOfBirth date;
Тогда представление может быть таким
public class TMyDB
{
...

public TOrder Order { get; }
public TGoods Goods { get; }
public TClients Clients { get; }
// какой-то обобщенный интерфейс
Load() {...}
Save() {...}
Clear() {...}
}
public class TOrder
{
public TOrderRows Rows { get; }

// и опять интерфейс
Load() {...}
Save() {...}
Clear() {...}
}
...
public TOrderRow
{
public PK IDs { get; }
public FK ClientID { get; set; }
public FK ItemID { get; set; }
public int Qty { get; set; }
}
и т.п.


При трех таблицах в базе все это можно вполне запихать в один датасет и не сильно волноваться
об последствиях. Однако при сотне-другой таблиц датасет станет слишком тяжелым. А при
частичной загрузке связанных данных - практически неуправляемым. Потому, думаю, что создавать
реальные представления таблиц нужно в динамике. Например, при первом обращении к таблице.
Все вроде выглядит не сложно.
Вопрос в том, что и как создавать. Классы, сгенеренные xsd.exe вполне неплохи, но в этом
варианте достаточно бесполезны. Так что практически весь код создания таблицы и добавления
ее в датасет отпадает. Можно написать новый генератор, но как-то лениво с этим возится.
Потому есть желание иметь аналог xsd.exe, выполняющий не генерацию кода, а создание
собственно заданной таблицы на базе XSD-схемы. Порылся в инете на предмет подобных вещей
- пока не нашел - все идут проторенной дорожкой - схема > код > Студио и пляски с бубном.
Хотелось бы услышать мнение об самой идее и об способе реализации.
P.S. К NHibernate пока просьба не отсылать...

 

Перейти на