Чтение сущностей предназначено для SQL-запроса? - PullRequest
0 голосов
/ 14 ноября 2011

У меня есть система, в которой клиент хочет переделать текущую модель так, что каждый раз, когда пользователь вносит изменение, администратор должен принять изменение до того, как оно будет записано в базу данных.

Я думал о том, чтобы сделать быстрое решение этой проблемы, переопределив SaveChanges и взяв каждый объект в ObjectStateManager и добавив его предполагаемый SQL-код в таблицу неопределенности, которая сохранит целочисленный SQL-запрос до тех пор, пока администратор его не примет (а затем запустить его).

Я знаю, что вы можете использовать ToTraceString () для запросов к базе данных, но можете ли вы каким-то образом получить запрос sql для объекта, взятого из ObjectStateManager?

Думал что-то вроде этого:

var modified = DB.ObjectStateManager.GetObjectStateEntries(System.Data.EntityState.Modified);

        foreach (var mod in modified)
        {

            //Insert the query to the limbo table         
            tblPendingChanges change = new tblPendingChanges();

            //Code omitted
            change.sql = mod.Query;
            //Code omitted
            DB.tblPendingChanges.AddObject(change);

            mod.Delete();

        }
DB.SaveChanges();

Ответы [ 2 ]

0 голосов
/ 15 ноября 2011

Я решил эту проблему с помощью найденной оболочки здесь

Это позволило мне прочитать каждый SQL-оператор перед его отправкой на сервер. Перенаправление.

Мне пришлось отредактировать оболочку, чтобы параметры могли быть правильно вставлены в оператор, чтобы можно было запустить оператор sql.

0 голосов
/ 14 ноября 2011

Ваше решение ужасно. Если у вас есть требование о том, что каждое изменение должно быть утверждено, это приводит к рабочему процессу утверждения, в котором вы сохраняете изменения во временном хранилище и перемещаете их в основные таблицы после утверждения. Это действительно не сделано на уровне SQL. Если вам нужно что-то, работающее на уровне SQL, не используйте инструменты высокого уровня, такие как Entity Framework, потому что они действительно не предназначены для поддержки этого. Например, EF не предоставит вам команды SQL, созданные для изменения данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...