|
MVVM - генерация моделей по базе данных
|
|||
---|---|---|---|
#18+
Вообще, "что-то модельное" генерирует Entity Framework, например. Но вроде как он относится к Data Layer. Тут кто-то (вроде, Алексей К) мне в одном из ответов в моей другой теме (никак не могу найти) писал, что у него модель генерируется по БД. Я вот хотел узнать, это имелось ввиду как раз то, что генерирует Entity Framework, LINQ to SQL и т. п. ORM'ы, или какая-то своя разработка, которая генерирует полноценную модель, а не слой данных, по структуре БД? А вообще, задача такая. У меня модель по сути повторяет структуру БД. Как можно генерировать эту модель по БД, чтобы при внесении изменений в БД в модели достаточно было, условно говоря, нажать кнопку "обновить" и классы модели обновились - добавились новые, удалились и изменились старые и т. д.? Ну неправильно же это, руками каждый раз в модель вносить изменения. При этом, насколько знаю, есть ещё обратная операция - генерация ДБ по модели. Но я так понимаю, что в большинстве случаев лучше наоборот делать - модель по ДБ. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.07.2013, 10:59 |
|
MVVM - генерация моделей по базе данных
|
|||
---|---|---|---|
#18+
авторКак можно генерировать эту модель по БД, чтобы при внесении изменений в БД в модели достаточно было, условно говоря, нажать кнопку "обновить" и классы модели обновились - добавились новые, удалились и изменились старые и т. д.? Ну неправильно же это, руками каждый раз в модель вносить изменения. Я имею ввиду, есть какие-то стандартные решения (лучше официальные от Майкрософта), или каждый делает что-то самописное и подгоняет это под свои задачи? Или все делают модели руками и при изменении БД тоже руками их меняют? ... |
|||
:
Нравится:
Не нравится:
|
|||
30.07.2013, 11:01 |
|
MVVM - генерация моделей по базе данных
|
|||
---|---|---|---|
#18+
Да, и ещё насчёт EF. Обычно же в моделях требуются всякие INotifyPropertyChanged и IDataErrorInfo. Если я начну дописывать реализации этих интерфейсов, и вообще дописывать классы, сгенерированные EF, не перестанет ли эта ORM работать? И не похерятся ли мои дописки после того, как я обновлю свою ORM-модель (опция "Update Model from Database" к файлу edmx)? Вобщем, хорошая или плохая это практика - дописывать сгенерированные дизайнером EF модели по БД? ... |
|||
:
Нравится:
Не нравится:
|
|||
30.07.2013, 11:07 |
|
MVVM - генерация моделей по базе данных
|
|||
---|---|---|---|
#18+
Все смешалось, люди, кони... Никакие сгенерированные данные дописывать нельзя. Если только это не единоразовая генерация. Иначе, само собой, при повторной генерации измерения пропадут. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.07.2013, 11:14 |
|
MVVM - генерация моделей по базе данных
|
|||
---|---|---|---|
#18+
Ну, я как раз к этому и склонялся. А теперь хочу узнать, есть ли стандартные и удобные способы создавать модели по БД, или всяк пишет кто во что горазд? ... |
|||
:
Нравится:
Не нравится:
|
|||
30.07.2013, 11:33 |
|
MVVM - генерация моделей по базе данных
|
|||
---|---|---|---|
#18+
Без примера такой модели неизвестно, о чем ты говоришь. "Модель по бд" это классы ORM (EF, NHibernate и т.п.). ... |
|||
:
Нравится:
Не нравится:
|
|||
30.07.2013, 11:44 |
|
MVVM - генерация моделей по базе данных
|
|||
---|---|---|---|
#18+
У меня задача из этой темы и я воспользовался этим решением (мне сказали, что это EAV ). Я сгенерировал ОРМ-модели с помощью EF. Теперь мне нужны модели, относящие к бизнес логике и в контексте MVVM. Я начал создавать модели для MVVM и понял, что можно просто практически скопировать те же классы, что создал EF мне в ОРМ. Вот я и думаю, то ли использовать эти же ОРМовские модели для моделей бизнес-логики, то ли создавать свои модели, которые будут практически копировать модели из ОРМ. Ведь БД - часть бизнес логики, а раз ОРМ создавался по БД, то и ОРМ получается частью бизнес-логики... и одновременно слоем данных. Вот, конкретно по этой структуре данных в БД. Создаю я в бизнес-логике модель "Машина". В ней есть поле, отвечающее за тип машины - "Тип машины". EF создал такую модель Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14.
А какую модель создать мне для бизнес-логики? По идее, можно прямо всё копировать из ОРМ. Но меня смущают эти виртуальные свойства. Как вообще создавать модели данных по EAV? ... |
|||
:
Нравится:
Не нравится:
|
|||
30.07.2013, 12:12 |
|
MVVM - генерация моделей по базе данных
|
|||
---|---|---|---|
#18+
user7320, ну если ты к проекту добавишь DB Context Generator (в VS.NET ставится через extentions) то классы твоей модели по базе будут генерироваться по шаблону генератору. если ты отредактируешь твой шаблон кодогенератора (добавишь реализации интерфейсов), то все будет генерироваться заново при обновлении. только очень задумайся - ты по классам генерируешь БД или по объектам БД генерируешь классы? ... |
|||
:
Нравится:
Не нравится:
|
|||
30.07.2013, 12:14 |
|
MVVM - генерация моделей по базе данных
|
|||
---|---|---|---|
#18+
авторКак вообще создавать модели данных по EAV? Я имею ввиду, что, похоже, то, что создал EF - ОРМ - это просто модели для удобной работы с БД из кода. В БД я применяю EAV, что представляет собой список сущностей в таблицах, вместо отдельной таблицы для каждой сущности. Но в бизнес-логике-то мне нужно работать с нормальными сущностями. Вот я и спрашиваю, как создать модель для бизнес-логике с оглядкой на БД, где применено EAV. Или не нужно оглядываться на БД, а нужно создавать модели для бизнес-логики, исходя из потребностей предметной области? ... |
|||
:
Нравится:
Не нравится:
|
|||
30.07.2013, 12:22 |
|
MVVM - генерация моделей по базе данных
|
|||
---|---|---|---|
#18+
monstrUuser7320, ну если ты к проекту добавишь DB Context Generator (в VS.NET ставится через extentions) то классы твоей модели по базе будут генерироваться по шаблону генератору. если ты отредактируешь твой шаблон кодогенератора (добавишь реализации интерфейсов), то все будет генерироваться заново при обновлении. только очень задумайся - ты по классам генерируешь БД или по объектам БД генерируешь классы? Т. е. вы спрашиваете, что у меня первично - БД или классы? Ну, я начинал проектирование приложения с БД. Но, как я выше написал, похоже, что проектирование БД и проектирование классов предметной области - немного разные вещи. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.07.2013, 12:24 |
|
MVVM - генерация моделей по базе данных
|
|||
---|---|---|---|
#18+
user7320Т. е. вы спрашиваете, что у меня первично - БД или классы? Ну, я начинал проектирование приложения с БД. Но, как я выше написал, похоже, что проектирование БД и проектирование классов предметной области - немного разные вещи. точно! я б сказал одинаковые вещи для очень простых моделей. как только бизнес логика начнется усложняться, то будут различатся классы все сильнее и сильнее. так что классы для бд - отдельно, классы модели предметной области отдельно. свзяь между ними осуществлять в специальной библиотеке - нужно иметь конвертор одного в другой. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.07.2013, 12:40 |
|
MVVM - генерация моделей по базе данных
|
|||
---|---|---|---|
#18+
user7320, версия EF какая? EF 5.x DbContext Fluent Generator for C# EF 4.x POCO Entity Generator for C# ... |
|||
:
Нравится:
Не нравится:
|
|||
30.07.2013, 14:14 |
|
MVVM - генерация моделей по базе данных
|
|||
---|---|---|---|
#18+
[quot user7320]Ну, я как раз к этому и склонялся.[/SRC]Ловушка терминологии. "Дописать" нельзя, но EF создает partial-классы, так что расширять всякими INotifyPropertyChanged можно совершенно невозбранно в отдельном модуле, которого не коснется генератор. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.07.2013, 17:17 |
|
MVVM - генерация моделей по базе данных
|
|||
---|---|---|---|
#18+
skyANAuser7320, версия EF какая? EF 5.x DbContext Fluent Generator for C# EF 4.x POCO Entity Generator for C# Хмм, у меня .NET FW 4.5, но EF 4.0. Неужели они его обновили до пятой версии в обход .NET FW? Ладно. Вобщем, как я понял, основная цель POCO - убрать зависимости от всяких интерфейсов и прочих "внутренностей" EF, но при этом сохранив возможность запрашивать данные из БД через всё тот же EF. Для меня же нужно просто сгенерировать классы модели из схемы БД. Как я понял из прочитанного тут , я могу просто выдрать файлы “Blogging.tt” и поместить их в свой проект, а весь прочий "мусор", сгенерированный POCO Template, просто удалить. Ну, а если я хочу генерацию без мусора, нужно написать свой генератор. Я правильно понимаю? ... |
|||
:
Нравится:
Не нравится:
|
|||
31.07.2013, 11:37 |
|
MVVM - генерация моделей по базе данных
|
|||
---|---|---|---|
#18+
Я чего-то не понял с этими POCO. Сгенерил сначала модель БД с помощью EF. Выдал он мне такой класс: Код: c# 1. 2. 3. 4. 5. 6. 7.
Добавил POCO через "EF 4.x POCO Entity Generator", получил такой класс: Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36.
Потом прочитал тут , что, мол, это устарело и воспользуйтесь "DbContext template", чтобы сгенерировать классы попроще. Воспользовался и получил: Код: c# 1. 2. 3. 4. 5. 6. 7.
Я не понял. При чём тут POCO, если изначально EF генерирует сразу такие же классы, которые советуют делать с помощью "продвинутого и упрощённого" POCO? ... |
|||
:
Нравится:
Не нравится:
|
|||
31.07.2013, 17:07 |
|
|
start [/forum/topic.php?fid=20&msg=38348438&tid=1404276]: |
0ms |
get settings: |
10ms |
get forum list: |
12ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
62ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
56ms |
get tp. blocked users: |
1ms |
others: | 13ms |
total: | 174ms |
0 / 0 |