|
В чем проблема этого подхода при определении состояния сущности?
|
|||
---|---|---|---|
#18+
Доброго дня всем. Задача довольна тривиальная. Есть список заказов из которого можно выбрать заказ и изменить его если потребуется. Если заказ был изменен предложить его сохранить, нет просто закрыть. Использую модель данных без генерации посредников. описание модели: public class Order{ public long IDRec { get; set; } ... public IList<Objects.SubOrder> SubOrder { get; set; } } описание репозитория: public class OrderRepository{ _repository = new GenericRepository<Models.Objects.Orders>(ORM.DataContextFactory.CreateDataContext()); ... internal void SaveChanges() { _repository.SaveChanges(); } internal bool HaveChanges(Models.Objects.Orders order) { _repository.DetectChanges(); return _repository.HaveChanges(order) || _repository.HaveChanges<Models.Objects.SubOrder>(order.SubOrder);} } описание обобщенного репозитория: public class GenericRepository<TEntity>{ ... public void SaveChanges() { _context.SaveChanges(); } internal bool HaveChanges(TEntity entity) { var stateObject = _context.ObjectStateManager.GetObjectStateEntry(entity); if (Condition(stateObject)) return true; return false; } internal bool HaveChanges<T>(IEnumerable<T> subEntities) { foreach (var entity in subEntities) { var stateObject = _context.ObjectStateManager.GetObjectStateEntry(entity); if (Condition(stateObject)) return true; } return false; } private bool Condition(System.Data.Objects.ObjectStateEntry state) { if (state.State == System.Data.EntityState.Modified || state.State == System.Data.EntityState.Deleted || state.State == System.Data.EntityState.Added) return true; return false; } internal void DetectChanges() { _context.DetectChanges(); } } Метод HaveChanges() класса OrderRepository сообщают команде о том может ли она быть выполнена. Может ли быть такая реализации и если нет то почему. ORM - EF. Спасибо. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.09.2012, 15:41 |
|
В чем проблема этого подхода при определении состояния сущности?
|
|||
---|---|---|---|
#18+
batanman, 1. многопоточность будет? 2. не совсем понял, зачем DetectChanges, ведь если у вас "приаттачен",то изменение автоматически будут при SaveChanges(). ... |
|||
:
Нравится:
Не нравится:
|
|||
11.09.2012, 15:44 |
|
В чем проблема этого подхода при определении состояния сущности?
|
|||
---|---|---|---|
#18+
batanman, кто вас так учил писать? Код: c# 1. 2. 3.
пипец ... |
|||
:
Нравится:
Не нравится:
|
|||
11.09.2012, 16:10 |
|
В чем проблема этого подхода при определении состояния сущности?
|
|||
---|---|---|---|
#18+
netivan, многопоточность будет. DetectChanges() нужно для того, чтобы как раз и увидеть было ли изменение сущности, без него изменения не видны ( может подскажете как увидеть изменения без вызова этого метода? ... |
|||
:
Нравится:
Не нравится:
|
|||
11.09.2012, 16:44 |
|
В чем проблема этого подхода при определении состояния сущности?
|
|||
---|---|---|---|
#18+
pation, как надо? ... |
|||
:
Нравится:
Не нравится:
|
|||
11.09.2012, 16:47 |
|
В чем проблема этого подхода при определении состояния сущности?
|
|||
---|---|---|---|
#18+
batanmanpation, как надо? Имхо, return (<условие>); ... |
|||
:
Нравится:
Не нравится:
|
|||
11.09.2012, 21:54 |
|
В чем проблема этого подхода при определении состояния сущности?
|
|||
---|---|---|---|
#18+
ShSergebatanmanpation, как надо? Имхо, return (<условие>); )) ... |
|||
:
Нравится:
Не нравится:
|
|||
12.09.2012, 02:16 |
|
В чем проблема этого подхода при определении состояния сущности?
|
|||
---|---|---|---|
#18+
оказывается мой вариант определения изменения состояния сущности работает, да не так как я думал ) при удалении из свойства навигации записи это не приводит к изменению состояние этого свойства... тогда вопрос, как до сохранения сущности ( вызова метода savechanges() ) узнать об изменении (добавления удаления) ее навигационного свойства? ... |
|||
:
Нравится:
Не нравится:
|
|||
12.09.2012, 02:22 |
|
В чем проблема этого подхода при определении состояния сущности?
|
|||
---|---|---|---|
#18+
Нашел только один вариант который отображает все изменения в контексте данных: //работает только после вызова context.DetectChanges(); return _context.ObjectStateManager.GetObjectStateEntries( System.Data.EntityState.Added | System.Data.EntityState.Deleted | System.Data.EntityState.Modified).Count() > 0; ... |
|||
:
Нравится:
Не нравится:
|
|||
12.09.2012, 13:07 |
|
|
start [/forum/topic.php?fid=17&fpage=31&tid=1350246]: |
0ms |
get settings: |
11ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
46ms |
get topic data: |
14ms |
get forum data: |
3ms |
get page messages: |
49ms |
get tp. blocked users: |
2ms |
others: | 280ms |
total: | 428ms |
0 / 0 |