Гость
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / Как правильно работать с Entity FrameworkCore / 25 сообщений из 33, страница 1 из 2
09.07.2018, 10:20
    #39671443
vb_sub
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно работать с Entity FrameworkCore
Всем привет, не очень понятно правильно ли я взаимодействую с Entity FrameworkCore.
Код: 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.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
public class SpravViewModel : BaseViewModel
    {

        #region Commands
        /// <summary>
        /// Добавляем новую номенклатуру
        /// </summary>
        public ICommand AddNomenCommand { get; }

        
        #endregion



        private string _AddDescrNomencl;

        public string AddDescrNomencl
        {
            get { return _AddDescrNomencl; }
            set { _AddDescrNomencl = value; OnPropertyChanged(); }
        }



        private int _AddNomerNomencl;

        public int AddNomerNomencl
        {
            get { return _AddNomerNomencl; }
            set { _AddNomerNomencl = value;OnPropertyChanged(); }
        }
        public ObservableCollection<ItemNom> ItemNomList { get;private set; }



        private readonly AppDBContext dbContext;

        public SpravViewModel(AppDBContext _DbContext)
        {
            AddNomenCommand = new RelayCommand(async ()=>await AddNomen());
           
            dbContext = _DbContext;

            ItemNomList = new ObservableCollection<ItemNom>(dbContext.nomenclature); 

        }

  

        #region CommandRealization
        /// <summary>
        /// Добавляем новый номенклатурный номер
        /// </summary>
        private async Task AddNomen()
        {
            if (AddNomerNomencl == default(int))
                return;

            if (string.IsNullOrWhiteSpace(AddDescrNomencl))
                return;


            try
            {
                ItemNom newItem = new ItemNom() { Nnomer = AddNomerNomencl, descr = AddDescrNomencl };

                await dbContext.nomenclature.AddAsync(newItem);
                await dbContext.SaveChangesAsync();

                AddNomerNomencl = default(int);
                AddDescrNomencl = default(string);

				//чтобы View обновилась необходимо дублировать действие
                ItemNomList.Add(newItem);

            }
            catch (Exception ex)
            {

            }      
        }


        private async Task RemoveNomencl(object param)
        {
            try
            {
                if (param is ItemNom itm)
                {
                    dbContext.nomenclature.Remove(itm);
                    await dbContext.SaveChangesAsync();
						//чтобы View обновилась необходимо дублировать действие
                    ItemNomList.Remove(itm);
                }
            }
            catch (Exception)
            {

                throw;
            }
        }


        #endregion


        public SpravViewModel()
        {

        }
    }



При создании коллекция элементов инициализируется значениями из _DbContext, но не "связывается" с ним с целью согласованности изменений, поэтому все действия с _DbContext приходится дублировать с коллекцией, привязанной к View. Собственно вопрос- является ли такой подход верным, и есть ли способ связать _DbContext c прибинденными коллекциями во View, чтобы избежать дублирования действий и над _DbContext и над собственно коллекциями. Спасибо.
...
Рейтинг: 0 / 0
09.07.2018, 10:27
    #39671454
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно работать с Entity FrameworkCore
- создал контекст
- заполнил коллекцию
- закрыл контекст
.... пользователь производит действия над коллекций, view обновляется автоматически
.... пользователь нажимает кнопку "сохранить"
- создал контекст
- загрузил коллекцию
- сравнил с имеющейся отредактированной, удадил удаленные, добавил новые в контексте
- сохранил контекст
- закрыл контекст

как-то так
...
Рейтинг: 0 / 0
09.07.2018, 10:34
    #39671462
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно работать с Entity FrameworkCore
Shocker.Pro,
Прости, но ты описал ровно то что сейчас у него и есть.
...
Рейтинг: 0 / 0
09.07.2018, 10:36
    #39671467
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно работать с Entity FrameworkCore
нет
...
Рейтинг: 0 / 0
09.07.2018, 10:38
    #39671471
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно работать с Entity FrameworkCore
vb_subПри создании коллекция элементов инициализируется значениями из _DbContext, но не "связывается" с ним с целью согласованности изменений, поэтому все действия с _DbContext приходится дублировать с коллекцией, привязанной к View. Собственно вопрос- является ли такой подход верным, и есть ли способ связать _DbContext c прибинденными коллекциями во View, чтобы избежать дублирования действий и над _DbContext и над собственно коллекциями. Спасибо.есть много ньюансов и много решенй.
Это: ленивые свойства, короткие, длинные транзакции, приаттачить обратно в контекст, проекции.
Их комбинация дает много вариантов решений.
Единственно правильного нету.
...
Рейтинг: 0 / 0
09.07.2018, 10:41
    #39671474
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно работать с Entity FrameworkCore
Shocker.Proнетбуду рад. Тогда ТС вопрос закроет.
...
Рейтинг: 0 / 0
09.07.2018, 12:42
    #39671556
vb_sub
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно работать с Entity FrameworkCore
Shocker.Pro,
то есть нужен еще промежуточный DataLayer между ViewModel и AppDBContext, который будет отвечать за хранение данных для ViewModel и за CRUD операции- напрямую использовать AppDBContext в ViewModel не стоит?
...
Рейтинг: 0 / 0
09.07.2018, 13:06
    #39671571
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно работать с Entity FrameworkCore
vb_subShocker.Pro,
то есть нужен еще промежуточный DataLayer между ViewModel и AppDBContext, который будет отвечать за хранение данных для ViewModel и за CRUD операции- напрямую использовать AppDBContext в ViewModel не стоит?
Сначала решите какой у вас MV***
Если MVVM то там Модель, ВьюМодель и Вью.
Слова контекст не используются. Это ещё ниже.
...
Рейтинг: 0 / 0
09.07.2018, 13:13
    #39671579
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно работать с Entity FrameworkCore
vb_subнапрямую использовать AppDBContext в ViewModel не стоит?Да, лучше изначально не превращать код в спагетти. Дело модели представления - отображать данные, а не заниматься взаимодействием с БД - это дело сервисных слоев. И это только на первый взгляд кажется, что кода больше, на самом деле потом сильно легче, когда нормальная слабосвязанная архитектура.

Но тут дело даже не в этом. Работа с контекстом предполагает, что его открыли, получили/записали данные и закрыли, а не держат постоянно открытым, пока потенциально бесконечно медленный пользователь щелкает по кнопкам.
...
Рейтинг: 0 / 0
09.07.2018, 13:27
    #39671586
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно работать с Entity FrameworkCore
Shocker.Pro,
У меня без всякого подлавливания просьба показать, работает ли двухсторонний биндинг в коллекциях WPF + EF.
Если работает, то схематичный пример.
...
Рейтинг: 0 / 0
09.07.2018, 13:29
    #39671587
vb_sub
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно работать с Entity FrameworkCore
Shocker.Pro,
то есть при каждом обращении к контексту нужно его заново создавать и сразу уничтожать после использования?
Код: c#
1.
2.
3.
4.
5.
   using (dbContext)
            {
                nom_list = new List<ItemNom>(dbContext.nomenclature);
                departments = new List<Department>(dbContext.Departments);
            }
...
Рейтинг: 0 / 0
09.07.2018, 13:36
    #39671593
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно работать с Entity FrameworkCore
Shocker.ProРабота с контекстом предполагает, что его открыли, получили/записали данные и закрыли, а не держат постоянно открытымесли десктоп, то не согласен. Вполне можно держать открытым на окно, на сессию.
У меня на окно есть такое.
...
Рейтинг: 0 / 0
09.07.2018, 13:51
    #39671604
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно работать с Entity FrameworkCore
Код: c#
1.
2.
3.
partial class MyUserControl : UserControl
{
      MyEntities dbContext = new MyEntities();


Imho
...
Рейтинг: 0 / 0
09.07.2018, 13:51
    #39671605
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно работать с Entity FrameworkCore
vb_subто есть при каждом обращении к контексту нужно его заново создавать и сразу уничтожать после использования?Не то чтобы при каждом... для совершения пакета операций, который не требует внутри себя ожидания действий пользователя и всяческих аналогичных внешних устройств
В общем его время жизни должно быть минимально разумным. К примеру, в ASP.NET контекст создается на каждый запрос к серверу.
...
Рейтинг: 0 / 0
09.07.2018, 13:55
    #39671606
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно работать с Entity FrameworkCore
vb_subShocker.Pro,
то есть при каждом обращении к контексту нужно его заново создавать и сразу уничтожать после использования?
Код: c#
1.
2.
3.
4.
5.
   using (dbContext)
            {
                nom_list = new List<ItemNom>(dbContext.nomenclature);
                departments = new List<Department>(dbContext.Departments);
            }


И где тут Модель и коллекция Observable/Changed?
С моделью там немножко по другому)
...
Рейтинг: 0 / 0
09.07.2018, 13:57
    #39671610
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно работать с Entity FrameworkCore
Petro123У меня без всякого подлавливания просьба показать, работает ли двухсторонний биндинг в коллекциях WPF + EF.
Если работает, то схематичный пример.Посмотри книгу Макдональда по WPF - там в главе "Привязка данных" есть пример привязки контролов WPF прям на коллекцию источника данных без всяких промежуточных ObservableCollection.
То есть для HelloWorld-а по-быстрому на коленке можно набросать.
...
Рейтинг: 0 / 0
09.07.2018, 14:03
    #39671614
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно работать с Entity FrameworkCore
Petro123если десктоп, то не согласен. Вполне можно держать открытым на окно, на сессию.Оптимистическая блокировка, вот что создаст головную боль. Ну и разрастание трегингового кеша
Petro123
Код: c#
1.
2.
3.
partial class MyUserControl : UserControl
{
      MyEntities dbContext = new MyEntities();

Офигеть, то есть насоздаешь параллельных контекстов, которые потом будут драться? Тогда уж синглтон, если очень хочется его не закрывать
...
Рейтинг: 0 / 0
09.07.2018, 14:05
    #39671615
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно работать с Entity FrameworkCore
Shocker.ProМакдональда по WPF
Mode=TwoWay s.253?
Ок. Гляну.
Пока не понял, как можно биндить если моя коллекция будет без событий.
Спс.
...
Рейтинг: 0 / 0
09.07.2018, 14:08
    #39671618
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно работать с Entity FrameworkCore
Shocker.Proблокировка, вот что создаст головную боль.?
При сохранении проверит. Даст знать что кто то поправил до тебя. Нет проблем.
Про кеш, я сказал что десктоп и кеш только у Петров.exe.
...
Рейтинг: 0 / 0
09.07.2018, 14:10
    #39671619
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно работать с Entity FrameworkCore
Shocker.ProОфигеть, то есть насоздаешь параллельных контекстов, которые потом будут драться? Тогда уж синглтон, если очень хочется его не закрывать
Старый не мой проект)). Тут сам контрол синглетон. Один экземпляр).
...
Рейтинг: 0 / 0
09.07.2018, 14:11
    #39671622
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно работать с Entity FrameworkCore
Petro123При сохранении проверит. Даст знать что кто то поправил до тебя. Нет проблем.А зачем создавать эту ситуацию? Это некрасиво с точки зрения пользователя.
Petro123Про кеш, я сказал что десктоп и кеш только у Петров.exe.И что, у тебя в конце-концов так вся БД в кеш перекачается, оно тебе надо?
...
Рейтинг: 0 / 0
09.07.2018, 14:15
    #39671625
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно работать с Entity FrameworkCore
Shocker.ProЭто некрасиво с точки
А как иначе то?
Длина транзакции на это не влияет ЕСЛИ ВЗЯЛ СУЩНОСТЬ В ФОРМУ НА РЕДАКТИРОВАНИЕ.
...
Рейтинг: 0 / 0
09.07.2018, 14:18
    #39671629
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно работать с Entity FrameworkCore
Shocker.Proвся БД в кеш перекачается, оно тебе надо?да нет же.
Контекст на модальное окно Справочник городов.
Как пример.
Там вью только 3 таблы. А база тыща таблиц.
...
Рейтинг: 0 / 0
09.07.2018, 14:23
    #39671631
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно работать с Entity FrameworkCore
Petro123Контекст на модальное окно Справочник городов.
Как пример.Ерундовый пример. Более-менее развитое приложение будет поддерживать параллельную работу в нескольких вкладках, а не модальные окна.
...
Рейтинг: 0 / 0
09.07.2018, 15:08
    #39671657
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно работать с Entity FrameworkCore
Shocker.ProPetro123Контекст на модальное окно Справочник городов.
Как пример.Ерундовый пример. Более-менее развитое приложение будет поддерживать параллельную работу в нескольких вкладках, а не модальные окна.
Сколько вью на 4 вкладки?
Где кнопка Сохранить бизнес транзакцию?
На каждой?
Одна на все?
...
И т.д. и т.п.
Главное, что программист много получает, т.к. вариантов написания кода полно.
С этим ты наверняка согласен).
Удачи!
...
Рейтинг: 0 / 0
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / Как правильно работать с Entity FrameworkCore / 25 сообщений из 33, страница 1 из 2
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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