Форум программистов, компьютерный форум, киберфорум
C#: Базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.68/25: Рейтинг темы: голосов - 25, средняя оценка - 4.68
0 / 0 / 0
Регистрация: 11.03.2015
Сообщений: 14
MS SQL

Entity Framework + Repository, обновление данных

12.03.2015, 11:33. Показов 5821. Ответов 27
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет, помогите пожалуйста разобраться, вопрос по сути простой.

Имеем Entity Framework и простейший репозиторий (CRUD операции убрал для наглядности):

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
public class Repository<T> : IRepository<T> where T : class
    {
        internal SalesAssistEntities context;        
        internal DbSet<T> dbSet;
 
        public Repository(SalesAssistEntities context)
        {
            this.context = context;
            this.dbSet = context.Set<T>();
 
        }
 
        public void Save()
        {
            context.SaveChanges();
        }
 
        public IEnumerable<T> GetAll()
        {
            return dbSet.ToList();
        }
 
    }
Сценарий:
  1. Наш репозиторий (context) запоняется после вызова функции GetAll()
  2. В базе данных происходят изменения
  3. Пользователь хочет получить актуальные данные, снова вызов функции GetAll()

И тут такая проблема. Новые, либо удалённые сущности, актуализируются на ура. Но изменения в уже загруженных сущностях не отображаются. Почему?

Пробил профайлер на базе, каждый раз при GetAll() идёт полная выборка таблицы. По идее данные доходят до контекста, но почему-то не обновляются сущности

Добавлено через 1 час 49 минут
Посмотрел. Практически все эти темы я уже до этого прочитал, там нет ответа на мой вопрос (

Добавлено через 18 часов 31 минуту
Ребят, пожалуйста, помогите найти в чём загвоздка. Без этого дальше разбираться не могу.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
12.03.2015, 11:33
Ответы с готовыми решениями:

Обновление данных в Entity Framework
Всем привет, помогите пожалуйста. вот есть такой код testentityEntities creat = new testentityEntities(); user...

Работа с Entity FrameWork обновление сущностей
Добрый день, у меня есть 2 сущности (работа и люди) со связкой 1 ко многим, есть необходимость менять связь сущности т.е. я хочу изменить у...

В чем разница между Entity Framework и Entity Framework Core?
В чем разница (если она есть) между entity framework и entity framework core?

27
 Аватар для m@cChe
45 / 45 / 26
Регистрация: 15.05.2013
Сообщений: 226
Записей в блоге: 1
13.03.2015, 14:28
Студворк — интернет-сервис помощи студентам
dSid, не придумал ничего лучше кроме как изменять данные из формы:

Добавлено через 57 секунд
C#
1
2
3
4
5
6
7
8
9
10
 private void Reset()
        {
            DataSource = GetAll().ToList();
        }
 
        private void button1_Click_1(object sender, EventArgs e)
        {
            SaveChanges();
            Reset();
        }
0
0 / 0 / 0
Регистрация: 11.03.2015
Сообщений: 14
13.03.2015, 14:42  [ТС]
а разве у вас это работает?

Допустим мы изменили сущностьА в форме и сущностьБ в базе. При Save() + Reset() сущностьА перезапишет сущностьА в базе. Однако изменения сущностиБ всё равно в гриде не отобразятся.

Заставить контекст обновить сущности можно, но я не знаю насколько это правильно.
Например вот так:

C#
1
((IObjectContextAdapter)context).ObjectContext.Refresh(System.Data.Entity.Core.Objects.RefreshMode.StoreWins, dbSet);
Таким образом обновятся ТОЛЬКО загруженные сущности.

Ну или второй вариант:

C#
1
context.Set<T>().AsNoTracking().ToList();
Но тогда я не знаю какие будут последствия. Не будет трэкинга изменений итд., что меня тоже не устраивает.


Что то здесь всё равно не то...
0
 Аватар для m@cChe
45 / 45 / 26
Регистрация: 15.05.2013
Сообщений: 226
Записей в блоге: 1
13.03.2015, 14:44
Цитата Сообщение от dSid Посмотреть сообщение
а разве у вас это работает?
да, работает прекрасно)
0
0 / 0 / 0
Регистрация: 11.03.2015
Сообщений: 14
13.03.2015, 14:45  [ТС]
Цитата Сообщение от m@cChe Посмотреть сообщение
да, работает прекрасно)
а можете загузить обратно мой проект с изменениями?
0
 Аватар для m@cChe
45 / 45 / 26
Регистрация: 15.05.2013
Сообщений: 226
Записей в блоге: 1
13.03.2015, 14:46
могу, ну ток я я подключения подчищу и немного его изменил...
0
0 / 0 / 0
Регистрация: 11.03.2015
Сообщений: 14
13.03.2015, 14:47  [ТС]
ну или просто бросте сюда весь код
0
 Аватар для m@cChe
45 / 45 / 26
Регистрация: 15.05.2013
Сообщений: 226
Записей в блоге: 1
13.03.2015, 15:42
SqlRepository:

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
  public class SqlRepository<T> : IRepository<T> where T : class
    {
        protected DbContext Context;
        protected DbSet<T> DbSet;
 
        public SqlRepository(DbContext context)
        {
            this.Context = context;
            this.DbSet = context.Set<T>();
 
        }
        public IQueryable<T> GetWhere(
                             Expression<Func<T, bool>> predicate)
        {
            return DbSet.Where(predicate);
        }
 
        public IQueryable<T> GetAll()
        {
            return DbSet;
        }
    }
}
EmployeeRepository:

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
 public class EmployeeRepository : SqlRepository<Employee>
    {
        public EmployeeRepository(DbContext context)
            : base(context)
        {
 
        }
 
        public IEnumerable<Employee> Get()
        {
            return GetAll().ToList();
        }
    }
UoW:

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 class UnitOfWork
    {
        private NorthwindEntities _context;
 
        public UnitOfWork()
        {
            _context = new NorthwindEntities();
            EmployeeRepository = new EmployeeRepository(_context);
        }
 
        public EmployeeRepository EmployeeRepository { get; set; }
 
        public void Save()
        {
            _context.SaveChanges();
        }
 
        private bool disposed = false;
 
        protected virtual void Dispose(bool disposing)
        {
            if (!this.disposed)
            {
                if (disposing)
                {
                    _context.Dispose();
                }
            }
            this.disposed = true;
        }
 
        public void Dispose()
        {
            Dispose(true);
        }
    }
Manager:

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
 public class ProjectManager : IDisposable
    {
        private UnitOfWork _uow;
        public ProjectManager()
        {
            _uow = new UnitOfWork();
        }
 
        public void Dispose()
        {
 
            if (_uow != null)
            {
                _uow.Dispose();
                _uow = null;
            }
        }
 
        public IEnumerable<Employee> Get()
        {
            return _uow.EmployeeRepository.Get().ToList();
        }
 
        public void SaveChanges()
        {
            _uow.Save();           
        }
    }
Form :

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
 public partial class Form1 : Form
    {
        private Infrastructure.ProjectManager _manager;
        public Form1(ProjectManager manager)
        {
            InitializeComponent();
            _manager = manager;
            FilData();
        }
 
        public IEnumerable<Object | Employee> DataSource //или =)
        {
            set
            {
                gridControl1.DataSource = value;
                gridView1.RefreshData();
            }
        }
 
        private void FilData()
        {
            DataSource = _manager.Get();
        }
 
        private void Reset()
        {
            DataSource = _manager.Get();
        }
 
        private void button1_Click_1(object sender, EventArgs e)
        {
            _manager.SaveChanges();
            Reset();
        }
    }
Добавлено через 37 минут
dSid, у Вас все получилось?
0
0 / 0 / 0
Регистрация: 11.03.2015
Сообщений: 14
13.03.2015, 15:49  [ТС]
Нет (((( слизал один в один, не работает.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
13.03.2015, 15:49

Автообновление данных с Entity Framework
В составе C# и MSSQL пишу многопользовательскую программу (по сути простой учёт продукции на складах). Использую Entity Framework для...

Синхронизация баз данных Entity Framework
Добрый день! Есть две базы данных(SQL Express) одинаковые по структуре на двух разных машинах, на одной добавляются данные в базу на...

Entity Framework и загрузка данных в БД SQL CE
Доброго времени суток! Использую Entity Framework Code First и бд SQL CE 4.0. Пытаюсь прочитать данные в потоке и записать их в бд. Делаю...

Entity Framework не создает базу данных
Здравствуйте. возникла какая-то непонятная проблема. работал с проектом в visual studio (база создавать через code first entity framework),...

Копирование база данных. Entity Framework
Привет, есть удалённая база данных, есть локальная. Локальная база данных служит исключительно только для чтения. Я хочу скопировать...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
28
Ответ Создать тему
Новые блоги и статьи
Nekobox - outbounds[0].transport: unknown transport type: raw
damix 01.10.2026
Фикс ошибки Правым кликом по серверу -> отладочная информация -> edit Заменить "net": "raw", на "net": "tcp", Нажать кнопку reload.
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js. В помощники взял Яндекс-Алису. Было создано три зала на разные интересы. исторические и ретро сериал Хичкок. . .
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU. Опрашиваются регистры. . .
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка: Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru