powered by simpleCommunicator - 2.0.56     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / MVVM - генерация моделей по базе данных
15 сообщений из 15, страница 1 из 1
MVVM - генерация моделей по базе данных
    #38348243
user7320
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вообще, "что-то модельное" генерирует Entity Framework, например. Но вроде как он относится к Data Layer. Тут кто-то (вроде, Алексей К) мне в одном из ответов в моей другой теме (никак не могу найти) писал, что у него модель генерируется по БД. Я вот хотел узнать, это имелось ввиду как раз то, что генерирует Entity Framework, LINQ to SQL и т. п. ORM'ы, или какая-то своя разработка, которая генерирует полноценную модель, а не слой данных, по структуре БД?

А вообще, задача такая. У меня модель по сути повторяет структуру БД. Как можно генерировать эту модель по БД, чтобы при внесении изменений в БД в модели достаточно было, условно говоря, нажать кнопку "обновить" и классы модели обновились - добавились новые, удалились и изменились старые и т. д.? Ну неправильно же это, руками каждый раз в модель вносить изменения.

При этом, насколько знаю, есть ещё обратная операция - генерация ДБ по модели. Но я так понимаю, что в большинстве случаев лучше наоборот делать - модель по ДБ.
...
Рейтинг: 0 / 0
MVVM - генерация моделей по базе данных
    #38348246
user7320
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторКак можно генерировать эту модель по БД, чтобы при внесении изменений в БД в модели достаточно было, условно говоря, нажать кнопку "обновить" и классы модели обновились - добавились новые, удалились и изменились старые и т. д.? Ну неправильно же это, руками каждый раз в модель вносить изменения.
Я имею ввиду, есть какие-то стандартные решения (лучше официальные от Майкрософта), или каждый делает что-то самописное и подгоняет это под свои задачи? Или все делают модели руками и при изменении БД тоже руками их меняют?
...
Рейтинг: 0 / 0
MVVM - генерация моделей по базе данных
    #38348255
user7320
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да, и ещё насчёт EF. Обычно же в моделях требуются всякие INotifyPropertyChanged и IDataErrorInfo. Если я начну дописывать реализации этих интерфейсов, и вообще дописывать классы, сгенерированные EF, не перестанет ли эта ORM работать? И не похерятся ли мои дописки после того, как я обновлю свою ORM-модель (опция "Update Model from Database" к файлу edmx)? Вобщем, хорошая или плохая это практика - дописывать сгенерированные дизайнером EF модели по БД?
...
Рейтинг: 0 / 0
MVVM - генерация моделей по базе данных
    #38348272
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Все смешалось, люди, кони...

Никакие сгенерированные данные дописывать нельзя. Если только это не единоразовая генерация. Иначе, само собой, при повторной генерации измерения пропадут.
...
Рейтинг: 0 / 0
MVVM - генерация моделей по базе данных
    #38348321
user7320
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну, я как раз к этому и склонялся.

А теперь хочу узнать, есть ли стандартные и удобные способы создавать модели по БД, или всяк пишет кто во что горазд?
...
Рейтинг: 0 / 0
MVVM - генерация моделей по базе данных
    #38348340
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Без примера такой модели неизвестно, о чем ты говоришь. "Модель по бд" это классы ORM (EF, NHibernate и т.п.).
...
Рейтинг: 0 / 0
MVVM - генерация моделей по базе данных
    #38348408
user7320
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У меня задача из этой темы и я воспользовался этим решением (мне сказали, что это EAV ). Я сгенерировал ОРМ-модели с помощью EF. Теперь мне нужны модели, относящие к бизнес логике и в контексте MVVM. Я начал создавать модели для MVVM и понял, что можно просто практически скопировать те же классы, что создал EF мне в ОРМ. Вот я и думаю, то ли использовать эти же ОРМовские модели для моделей бизнес-логики, то ли создавать свои модели, которые будут практически копировать модели из ОРМ. Ведь БД - часть бизнес логики, а раз ОРМ создавался по БД, то и ОРМ получается частью бизнес-логики... и одновременно слоем данных.

Вот, конкретно по этой структуре данных в БД. Создаю я в бизнес-логике модель "Машина". В ней есть поле, отвечающее за тип машины - "Тип машины". EF создал такую модель

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
public partial class Car
{
    public Car()
    {
        this.CarCharacteristics = new HashSet<CarCharacteristic>();
    }
    
    public System.Guid Id { get; set; }
    public string Name { get; set; }
    public Nullable<int> Id_CarType { get; set; }
    
    public virtual ICollection<CarCharacteristic> CarCharacteristics { get; set; }
    public virtual CarType CarType { get; set; }
}



А какую модель создать мне для бизнес-логики? По идее, можно прямо всё копировать из ОРМ. Но меня смущают эти виртуальные свойства.

Как вообще создавать модели данных по EAV?
...
Рейтинг: 0 / 0
MVVM - генерация моделей по базе данных
    #38348413
monstrU
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
user7320,

ну если ты к проекту добавишь DB Context Generator (в VS.NET ставится через extentions) то классы твоей модели по базе будут генерироваться по шаблону генератору. если ты отредактируешь твой шаблон кодогенератора (добавишь реализации интерфейсов), то все будет генерироваться заново при обновлении.

только очень задумайся - ты по классам генерируешь БД или по объектам БД генерируешь классы?
...
Рейтинг: 0 / 0
MVVM - генерация моделей по базе данных
    #38348438
user7320
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторКак вообще создавать модели данных по EAV?
Я имею ввиду, что, похоже, то, что создал EF - ОРМ - это просто модели для удобной работы с БД из кода. В БД я применяю EAV, что представляет собой список сущностей в таблицах, вместо отдельной таблицы для каждой сущности. Но в бизнес-логике-то мне нужно работать с нормальными сущностями. Вот я и спрашиваю, как создать модель для бизнес-логике с оглядкой на БД, где применено EAV. Или не нужно оглядываться на БД, а нужно создавать модели для бизнес-логики, исходя из потребностей предметной области?
...
Рейтинг: 0 / 0
MVVM - генерация моделей по базе данных
    #38348441
user7320
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
monstrUuser7320,

ну если ты к проекту добавишь DB Context Generator (в VS.NET ставится через extentions) то классы твоей модели по базе будут генерироваться по шаблону генератору. если ты отредактируешь твой шаблон кодогенератора (добавишь реализации интерфейсов), то все будет генерироваться заново при обновлении.

только очень задумайся - ты по классам генерируешь БД или по объектам БД генерируешь классы?
Т. е. вы спрашиваете, что у меня первично - БД или классы? Ну, я начинал проектирование приложения с БД. Но, как я выше написал, похоже, что проектирование БД и проектирование классов предметной области - немного разные вещи.
...
Рейтинг: 0 / 0
MVVM - генерация моделей по базе данных
    #38348489
monstrU
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
user7320Т. е. вы спрашиваете, что у меня первично - БД или классы? Ну, я начинал проектирование приложения с БД. Но, как я выше написал, похоже, что проектирование БД и проектирование классов предметной области - немного разные вещи.
точно! я б сказал одинаковые вещи для очень простых моделей. как только бизнес логика начнется усложняться, то будут различатся классы все сильнее и сильнее.
так что классы для бд - отдельно, классы модели предметной области отдельно. свзяь между ними осуществлять в специальной библиотеке - нужно иметь конвертор одного в другой.
...
Рейтинг: 0 / 0
MVVM - генерация моделей по базе данных
    #38348705
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
MVVM - генерация моделей по базе данных
    #38349175
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[quot user7320]Ну, я как раз к этому и склонялся.[/SRC]Ловушка терминологии.
"Дописать" нельзя, но EF создает partial-классы, так что расширять всякими INotifyPropertyChanged можно совершенно невозбранно в отдельном модуле, которого не коснется генератор.
...
Рейтинг: 0 / 0
MVVM - генерация моделей по базе данных
    #38349832
user7320
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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, просто удалить. Ну, а если я хочу генерацию без мусора, нужно написать свой генератор. Я правильно понимаю?
...
Рейтинг: 0 / 0
MVVM - генерация моделей по базе данных
    #38350571
user7320
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я чего-то не понял с этими POCO. Сгенерил сначала модель БД с помощью EF. Выдал он мне такой класс:

Код: c#
1.
2.
3.
4.
5.
6.
7.
public partial class Car
{
    public int Id { get; set; }
    public Nullable<int> Id_CarType { get; set; }

    public virtual CarType CarType { get; set; }
}



Добавил 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.
public partial class Car
{
    #region Primitive Properties

    public virtual int Id
    {
        get;
        set;
    }

    public virtual Nullable<int> Id_CarType
    {
        get { return _id_CarType; }
        set
        {
            try
            {
                _settingFK = true;
                if (_id_CarType != value)
                {
                    if (CarType != null && CarType.Id != value)
                    {
                        CarType = null;
                    }
                    _id_CarType = value;
                }
            }
            finally
            {
                _settingFK = false;
            }
        }
    }
    private Nullable<int> _id_CarType;
    
    // и т. д.



Потом прочитал тут , что, мол, это устарело и воспользуйтесь "DbContext template", чтобы сгенерировать классы попроще. Воспользовался и получил:

Код: c#
1.
2.
3.
4.
5.
6.
7.
public partial class Car
{
    public int Id { get; set; }
    public Nullable<int> Id_CarType { get; set; }

    public virtual CarType CarType { get; set; }
}



Я не понял. При чём тут POCO, если изначально EF генерирует сразу такие же классы, которые советуют делать с помощью "продвинутого и упрощённого" POCO?
...
Рейтинг: 0 / 0
15 сообщений из 15, страница 1 из 1
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / MVVM - генерация моделей по базе данных
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]