Форум программистов, компьютерный форум, киберфорум
C#: Базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Вежливость-главное оружие
 Аватар для some_name
233 / 234 / 86
Регистрация: 19.02.2013
Сообщений: 1,446

Windows Forms EF не подтягивает изменения, если меняю бд вручную

13.06.2016, 02:07. Показов 658. Ответов 0
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте!

Такая проблема, есть сущность Document, у которой ссылка на пользователя, который сейчас владеет этим документом. Так вот, когда меняю CurrentUserId вручную, то изменения не подтягиваются. В чем может быть причина? Насколько я понял, это из-за того, что контекст EF не синхранизируется с БД, если выполнять изменения не через EF. Возможно это побороть?

Document.cs
Кликните здесь для просмотра всего текста

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
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
 
namespace LightDocumentManagerModel.Model
{
    public class Document : BaseEntity
    {
        
        [Required]
        [MaxLength(200)]
        public string Name { set; get; }
 
        public string Description { set; get; }
 
        private DocumentStatus status;
 
        [NotMapped]
        public DocumentStatus Status
        {
            set
            {
                if ((status = value) == DocumentStatus.Available)
                {
                    CurrentUserId = null;
                    currentUser = null;
                }
            }
            get { return (currentUser == null && CurrentUserId == null) ? DocumentStatus.Available : status; }
        }
 
        [Required]
        [MaxLength(100)]
        public string FileId { set; get; }
 
        [Required]
        public DateTime UploadDate { set; get; }
        
        public virtual List<HistoryEntry> History { set; get; }
 
        private User currentUser;
 
        [ForeignKey("CurrentUser")]
        public int? CurrentUserId { set; get; }
        
        public User CurrentUser 
        {
            set { if ((currentUser = value) == null) status = DocumentStatus.Available; }
            get { return currentUser; }
        } 
 
        [ForeignKey("Loader")]
        public int LoaderId { set; get; }
 
        public virtual User Loader { set; get; }
    }
}


User.cs
Кликните здесь для просмотра всего текста

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
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
 
namespace LightDocumentManagerModel.Model
{
    public class User : BaseEntity
    {        
        [Required]
        [MaxLength(50)]
        public string Username { set; get; }
 
        [Required]
        [MaxLength(50)]
        public string Password { set; get; }
 
        [Required]
        [MaxLength(100)]
        public string FirstName { set; get; }
 
        [Required]
        [MaxLength(100)]
        public string LastName { set; get; }
 
        [MaxLength(100)]
        public string Patronymic { set; get; }
 
        public DateTime? Birthday { set; get; }
 
        public bool Active { set; get; }
 
        public virtual List<Role> Roles { set; get; }
 
        [NotMapped]
        public string FullName
        {
            get { return FirstName + " " + LastName + " " + Patronymic + "(" + Username + ")"; }
        }
    }
}


DocumentService.cs
Кликните здесь для просмотра всего текста

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
using LightDocumentManagerModel;
using LightDocumentManagerModel.Model;
using LightDocumentManagerService.Service;
using System.Collections.Generic;
using System.Linq;
 
namespace LightDocumentManager.Service
{
    public class DocumentService
    {
        private static Context db = Context.Instance;
                    
        public static int Remove(Document document)
        {
            db.Documents.Remove(document);
            return db.SaveChanges();
        }
 
        public static int Update(Document document)
        {
            return db.SaveChanges();
        }
 
        public static List<Document> FindAll()
        {
            return db.Documents.ToList();
        }
 
        public static List<Document> Find(string text)
        {
            if (string.IsNullOrWhiteSpace(text))
            {
                return db.Documents.ToList();
            }
            return db.Documents.AsEnumerable().Where(d => StringUtils.Contains(d.Name, text)).ToList();
        }
     
        public static void Add(Document document)
        {
            db.Documents.Add(document);
            db.SaveChanges();
        }
    }
}


Context.cs
Кликните здесь для просмотра всего текста

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
using LightDocumentManager.Validation;
using LightDocumentManagerModel.Model;
using System.Data.Entity;
using System.Data.Entity.ModelConfiguration.Conventions;
 
namespace LightDocumentManagerModel
{
    public class Context : DbContext
    {
        public static Context Instance { set; get; }
 
        public static void Init()
        {
            Instance = new Context();
        }
 
        private Context() : base("DocManDb")
        {
            Database.SetInitializer(new DatabaseInitializer());
        }
 
        protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
            modelBuilder.Conventions.Remove<OneToManyCascadeDeleteConvention>();
            modelBuilder.Conventions.Remove<ManyToManyCascadeDeleteConvention>();
 
            modelBuilder.Entity<HistoryEntry>()
                .HasRequired(h => h.Document)
                .WithMany(d => d.History)
                .WillCascadeOnDelete(true);
 
            base.OnModelCreating(modelBuilder);
        }
 
        public override int SaveChanges()
        {
            return ErrorCatcher.Execute(() => base.SaveChanges());
        }
 
        public DbSet<User> Users { set; get; }
        public DbSet<Role> Roles { set; get; }
        public DbSet<Document> Documents { set; get; }
        public DbSet<HistoryEntry> History { set; get; }
        public DbSet<Notification> Notifications { set; get; }
    }
}


Дело в том, что у меня могут быть запущены несколько инстансов приложения, и сейчас данные не синхронизируются, потом что, как мне кажется, у них разные Context'ы. Как это побороть и сказать EF всегда смотреть в бд?

Заранее спс!

Добавлено через 6 минут
update

Но вот если добавить запись ручками в бд, то она подтягивется EF

Добавлено через 3 часа 1 минуту
Нашел решение: либо shor-live context использовать, но в моем случае неочень удобно, либо Context.Entry(entry).Reload();
Пока залатал 2м вариантом.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
13.06.2016, 02:07
Ответы с готовыми решениями:

Windows Forms: вручную или конструктор?
Читаю книгу Петцольда по winForm, автор все формы делает вручную, т.е без использования визуальных возможностей студии, у меня возник такой...

В каком элементе Windows Forms можно форматировать фрагмент текста вручную?
Можно ли форматировать фрагмент текст в richTextBox или TextBox или в другом элементе Windows Forms? Т.е. изменить толщину шрифта, цвет...

Изменения стиля для приложения Windows Forms
Здравствуйте. Нужны все возможные варианты изменения стиля для windows forms. Что вы можете посоветовать?

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
13.06.2016, 02:07
Помогаю со студенческими работами здесь

Windows Forms: Если число от 10 до 30
Как сделать так, чтобы если переменная number была от 10 до 30 выводился MessageBox?

Компьютер не подтягивает Windows
Здравствуйте. Отключил я свой hdd и подключил другой, потом установил на него виндовс, поставил туда еще кое-что, и после этого...

Если ли библиотеки анимации для Windows Forms
Здравствуйте форумчане. 1) если ли в с# библиотеки по аминированию в поле Form его объектов (текстовых полей, кнопок и т.д.) 2) пока я...

Windows.Forms - Процедуры, цикл for и System.Windows.Forms.Button
Доброго времени суток. Есть WinForms программа: ... private ClickedButtonId, ClickedButtonX, ClickedButtonY:Integer; ...

Data Environment, ничего не меняется если я меняю положение курсора в DataGrid1_1
У меня следующая ситуация - использую DataEnvironment - там у меня иерархия объектов Command: Command1 Command1_1 ...


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

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Новые блоги и статьи
Переходник USB-CAN-GPIO
Eddy_Em 20.03.2026
Достаточно давно на работе возникла необходимость в переходнике CAN-USB с гальваноразвязкой, оный и был разработан. Однако, все меня терзала совесть, что аж 48-ногий МК используется так тупо: просто. . .
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru