Обновить поля в таблице. EF
От: SeLo  
Дата: 20.10.15 11:56
Оценка:
Использую EF и DBContext.

От установки к установке базы данных немного различаются, в некоторых таблицах присутствуют или отсутсвуют определенных поля. Модель сгенерирована без этих полей. Необходимо во время сохранения по событию "ObjectContext.SavingChanges" проверить есть ли эти поля "физически" в базе данных и если есть установить определенные значения. Еще раз напомню, что полей этих в модели нет.
Как делать сие. Спасибо.
Re: Обновить поля в таблице. EF
От: _ichensky Европа https://github.com/ichensky
Дата: 20.10.15 21:21
Оценка:
Здравствуйте, SeLo, Вы писали:

Сначала надо узнать какие поля есть в БД таблице(когда подсоединяется БД можно сделать сиквел запрос и вытянуть нужные данные — список колонок). Потом перед сохранением получаем raw SQL запроса query.tostring() который должен выполняться на 'savechanges' редактируем его, конкатенируем нужные данные, и вместо savechanges выполняемых наш запрос.
Re: Обновить поля в таблице. EF
От: Doc Россия http://andrey.moveax.ru
Дата: 21.10.15 04:09
Оценка:
Здравствуйте, SeLo, Вы писали:

SL>Использую EF и DBContext.


SL>От установки к установке базы данных немного различаются, в некоторых таблицах присутствуют или отсутсвуют определенных поля. Модель сгенерирована без этих полей. Необходимо во время сохранения по событию "ObjectContext.SavingChanges" проверить есть ли эти поля "физически" в базе данных и если есть установить определенные значения. Еще раз напомню, что полей этих в модели нет.


Думаю лучше это делать триггерами в SQL. Делать SQL запросы с помощью EF не сама лучшая идея (мешать два разных подхода).
Re[2]: Обновить поля в таблице. EF
От: SoLame  
Дата: 21.10.15 13:43
Оценка:
Здравствуйте, _ichensky, Вы писали:


_>Сначала надо узнать какие поля есть в БД таблице(когда подсоединяется БД можно сделать сиквел запрос и вытянуть нужные данные — список колонок). Потом перед сохранением получаем raw SQL запроса query.tostring() который должен выполняться на 'savechanges' редактируем его, конкатенируем нужные данные, и вместо savechanges выполняемых наш запрос.


Вы видели запросы, которые генерит EF для случая запрос на linq сложнее чем db.table.where(..).ToList() ?

Задача по разбору SQL выдаваемого EF выглядит как более сложная чем задача поставлена изначально...
Re: Обновить поля в таблице. EF
От: SoLame  
Дата: 21.10.15 13:50
Оценка:
Здравствуйте, SeLo, Вы писали:

SL>Использую EF и DBContext.


SL>От установки к установке базы данных немного различаются, в некоторых таблицах присутствуют или отсутсвуют определенных поля. Модель сгенерирована без этих полей. Необходимо во время сохранения по событию "ObjectContext.SavingChanges" проверить есть ли эти поля "физически" в базе данных и если есть установить определенные значения. Еще раз напомню, что полей этих в модели нет.

SL>Как делать сие. Спасибо.


Перекрой SaveChanges и анализируй результат ChangeTracker.Entries() — там все измененные в контексте сущности.
Re[2]: Обновить поля в таблице. EF
От: SeLo  
Дата: 22.10.15 06:46
Оценка:
SL>Перекрой SaveChanges и анализируй результат ChangeTracker.Entries() — там все измененные в контексте сущности.

Да, в моем случае наверное самый подходящий вариант.
Всем спасибо
Re[3]: Обновить поля в таблице. EF
От: Doc Россия http://andrey.moveax.ru
Дата: 22.10.15 08:17
Оценка:
Здравствуйте, SeLo, Вы писали:

SL>>Перекрой SaveChanges и анализируй результат ChangeTracker.Entries() — там все измененные в контексте сущности.

SL>Да, в моем случае наверное самый подходящий вариант.

Что-то не пойму, а как ChangeTracker.Entries() покажет наличие полей которые не замаплены в модели? Ну будет список сущностей, которые изменились, а про не замапленные поля EF ничего ведь не знает.
Re[4]: Обновить поля в таблице. EF
От: SeLo  
Дата: 22.10.15 09:05
Оценка:
Doc>Что-то не пойму, а как ChangeTracker.Entries() покажет наличие полей которые не замаплены в модели? Ну будет список сущностей, которые изменились, а про не замапленные поля EF ничего ведь не знает.


ChangeTracker предоставит список изменяемых/новых записей, наличие полей нужно уже будет проверять в SQL-скрипте, который и обновит эти поля. SQL скрипт можно выполнить "напрямую" через .NET ADO, но кажется EF тоже может.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.