powered by simpleCommunicator - 2.0.50     © 2025 Programmizd 02
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Entity Framework + MVVM + сохранить/отмена
3 сообщений из 3, страница 1 из 1
Entity Framework + MVVM + сохранить/отмена
    #38673078
evm78
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день.
Возникла необходимость сделать на работу базу клиентов. Выбор пал на C#+WPF+MVVM+EF6+Database First+MySQL. Половина работы уже сделана, но возникла проблема с редактированием данных с возможностью отмены, в частности это касается таблиц многие-ко-многим: у каждого клиента может быть несколько сотрудников, у каждого сотрудника может быть несколько клиентов.
Код: 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.
public partial class Customer
    {
        public Customer()
        {
            this.Person = new HashSet<Person>();
        }
    
        public int ID { get; set; }
        public string Name { get; set; }
        ...
        public virtual ICollection<Person> Person { get; set; }
    }

public partial class Person
    {
        public Person()
        {
            this.Customer = new HashSet<Customer>();
        }
    
        public int ID { get; set; }
        public string Name { get; set; }
        ...    
        public virtual ICollection<Customer> Customer { get; set; }
    }

public partial class Entities : DbContext
    {
        public Entities()
            : base("name=Entities")
        {			
        }
    
        protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
            throw new UnintentionalCodeFirstException();
        }    
       
        public virtual DbSet<Customer> Customer { get; set; }       
        public virtual DbSet<Person> Person { get; set; }      
    }



Записи редактируются в отдельном окне с кнопками Сохранить/Отменить.
Главный вопрос: подскажите как реализовать возможность отмены изменений вообще и с учетом отношений многие-ко-многим в частности? Это должно быть реализовано в MVVM или в EF? Подскажите как. Спасибо.
В принципе это все, если кому интересно, ниже написал как я это делал.

Контекст создается один раз в Repository.
1. Для отмены изменений использовал EntityState в EF
Код: c#
1.
2.
3.
4.
5.
6.
switch (entry.State)
{
case EntityState.Modified:
	entry.State = EntityState.Unchanged;
break;
}


Все хорошо, но для отношений *-* это не подходит.

2. Пробовал получить копию редактируемой записи из контекста
Код: c#
1.
2.
3.
var copyCustomer = repository.context.Customer.Include("Person")
							.AsNoTracking()
							.FirstOrDefault(c => c.ID == 1);


но возникает проблема с context.Customer.Attach(copyCustomer) - там осталась оригинальная запись с таким же ID.
context.Customer.Add(copyCustomer) дублирует записи.

3. Serialization и Reflection вызывают исключение.
...
Рейтинг: 0 / 0
Entity Framework + MVVM + сохранить/отмена
    #38673188
Lelouch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
evm78,

evm78Контекст создается один раз в Repository.

Я бы отказался от такого подхода.
По крайней мере для окон редактирования создавайте свой контекст.
...
Рейтинг: 0 / 0
Entity Framework + MVVM + сохранить/отмена
    #38673347
evm78
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Lelouch, Спасибо.
Т.е. для окна редактирования создать временный контекст, если нажата Сохранить-записать через него в базу и считать редактируемую запись из базы в основном контексте? Или я неправильно вас понял или придется согласиться с лишней операцией чтения при редактировании.

Классы сущностей EF в моем MVVM выступает моделью.
Постоянный контекст использую из-за возможности видеть изменения в связанных сущностей при изменении связей (заменили у клиента сотрудника и при переходе в закладку Сотрудники через привязку WPF обновляется список связанных клиентов)
...
Рейтинг: 0 / 0
3 сообщений из 3, страница 1 из 1
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Entity Framework + MVVM + сохранить/отмена
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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