powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / Как правильно работать с Entity FrameworkCore
25 сообщений из 33, страница 1 из 2
Как правильно работать с Entity FrameworkCore
    #39671443
vb_sub
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всем привет, не очень понятно правильно ли я взаимодействую с 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
Как правильно работать с Entity FrameworkCore
    #39671454
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
- создал контекст
- заполнил коллекцию
- закрыл контекст
.... пользователь производит действия над коллекций, view обновляется автоматически
.... пользователь нажимает кнопку "сохранить"
- создал контекст
- загрузил коллекцию
- сравнил с имеющейся отредактированной, удадил удаленные, добавил новые в контексте
- сохранил контекст
- закрыл контекст

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

Но тут дело даже не в этом. Работа с контекстом предполагает, что его открыли, получили/записали данные и закрыли, а не держат постоянно открытым, пока потенциально бесконечно медленный пользователь щелкает по кнопкам.
...
Рейтинг: 0 / 0
Как правильно работать с Entity FrameworkCore
    #39671586
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro,
У меня без всякого подлавливания просьба показать, работает ли двухсторонний биндинг в коллекциях WPF + EF.
Если работает, то схематичный пример.
...
Рейтинг: 0 / 0
Как правильно работать с Entity FrameworkCore
    #39671587
vb_sub
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Как правильно работать с Entity FrameworkCore
    #39671593
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.ProРабота с контекстом предполагает, что его открыли, получили/записали данные и закрыли, а не держат постоянно открытымесли десктоп, то не согласен. Вполне можно держать открытым на окно, на сессию.
У меня на окно есть такое.
...
Рейтинг: 0 / 0
Как правильно работать с Entity FrameworkCore
    #39671604
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: c#
1.
2.
3.
partial class MyUserControl : UserControl
{
      MyEntities dbContext = new MyEntities();


Imho
...
Рейтинг: 0 / 0
Как правильно работать с Entity FrameworkCore
    #39671605
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vb_subто есть при каждом обращении к контексту нужно его заново создавать и сразу уничтожать после использования?Не то чтобы при каждом... для совершения пакета операций, который не требует внутри себя ожидания действий пользователя и всяческих аналогичных внешних устройств
В общем его время жизни должно быть минимально разумным. К примеру, в ASP.NET контекст создается на каждый запрос к серверу.
...
Рейтинг: 0 / 0
Как правильно работать с Entity FrameworkCore
    #39671606
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Как правильно работать с Entity FrameworkCore
    #39671610
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123У меня без всякого подлавливания просьба показать, работает ли двухсторонний биндинг в коллекциях WPF + EF.
Если работает, то схематичный пример.Посмотри книгу Макдональда по WPF - там в главе "Привязка данных" есть пример привязки контролов WPF прям на коллекцию источника данных без всяких промежуточных ObservableCollection.
То есть для HelloWorld-а по-быстрому на коленке можно набросать.
...
Рейтинг: 0 / 0
Как правильно работать с Entity FrameworkCore
    #39671614
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123если десктоп, то не согласен. Вполне можно держать открытым на окно, на сессию.Оптимистическая блокировка, вот что создаст головную боль. Ну и разрастание трегингового кеша
Petro123
Код: c#
1.
2.
3.
partial class MyUserControl : UserControl
{
      MyEntities dbContext = new MyEntities();

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


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