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

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

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

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

А теперь хочу узнать, есть ли стандартные и удобные способы создавать модели по БД, или всяк пишет кто во что горазд?
...
Рейтинг: 0 / 0
30.07.2013, 11:44
    #38348340
Antonariy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MVVM - генерация моделей по базе данных
Без примера такой модели неизвестно, о чем ты говоришь. "Модель по бд" это классы ORM (EF, NHibernate и т.п.).
...
Рейтинг: 0 / 0
30.07.2013, 12:12
    #38348408
user7320
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MVVM - генерация моделей по базе данных
У меня задача из этой темы и я воспользовался этим решением (мне сказали, что это 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
30.07.2013, 12:14
    #38348413
monstrU
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MVVM - генерация моделей по базе данных
user7320,

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

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

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

только очень задумайся - ты по классам генерируешь БД или по объектам БД генерируешь классы?
Т. е. вы спрашиваете, что у меня первично - БД или классы? Ну, я начинал проектирование приложения с БД. Но, как я выше написал, похоже, что проектирование БД и проектирование классов предметной области - немного разные вещи.
...
Рейтинг: 0 / 0
30.07.2013, 12:40
    #38348489
monstrU
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MVVM - генерация моделей по базе данных
user7320Т. е. вы спрашиваете, что у меня первично - БД или классы? Ну, я начинал проектирование приложения с БД. Но, как я выше написал, похоже, что проектирование БД и проектирование классов предметной области - немного разные вещи.
точно! я б сказал одинаковые вещи для очень простых моделей. как только бизнес логика начнется усложняться, то будут различатся классы все сильнее и сильнее.
так что классы для бд - отдельно, классы модели предметной области отдельно. свзяь между ними осуществлять в специальной библиотеке - нужно иметь конвертор одного в другой.
...
Рейтинг: 0 / 0
30.07.2013, 14:14
    #38348705
skyANA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MVVM - генерация моделей по базе данных
...
Рейтинг: 0 / 0
30.07.2013, 17:17
    #38349175
Antonariy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MVVM - генерация моделей по базе данных
[quot user7320]Ну, я как раз к этому и склонялся.[/SRC]Ловушка терминологии.
"Дописать" нельзя, но EF создает partial-классы, так что расширять всякими INotifyPropertyChanged можно совершенно невозбранно в отдельном модуле, которого не коснется генератор.
...
Рейтинг: 0 / 0
31.07.2013, 11:37
    #38349832
user7320
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MVVM - генерация моделей по базе данных
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
31.07.2013, 17:07
    #38350571
user7320
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MVVM - генерация моделей по базе данных
Я чего-то не понял с этими 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
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / MVVM - генерация моделей по базе данных / 15 сообщений из 15, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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