2009-05-07 2 views
2

Я пришел из мира asp.net, где мы будем использовать objectdatasource, подключиться к уровню доступа к данным и установить его свойство ConflictDetection в «CompareAllValues». В объекте ObjectDataSource используется объект OldValuesParameterFormatString, который используется для идентификации старых параметров значения.Параллелизм с хранимыми процедурами Linq To Sql

В sql-процедуре, которая выполняет обновление, потребуются как новые параметры, так и старые параметры, и это было ... Супер просто реализовать; ODS обрабатывает старые значения для вас.

Я перешел на Linq на SQL и WinForms. Я создал службу WCF, которая является нашим бизнес-уровнем, и у меня есть хранимая процедура, которая обновит некоторую таблицу. В конструкторе контекста данных я вижу, что в столбцах класса есть свойство Update Check. Я не напрямую обновляю таблицу из класса, вместо этого я вызываю хранимую процедуру для обновления. Есть ли способ сохранить исходные значения, возможно, из контекста данных, аналогично тому, как объект objectdatasource будет?

+0

Некоторые примеры кода были бы приятными; как вы называете хранимую процедуру? – Andomar

+0

У меня есть служебная ссылка ... Так что это простой вызов: ServiceReference1.Service1Client client = new ServiceReference1.Service1Client(); затем client.UpdateSomeTable(); Очевидно, что параметры будут как новыми значениями, так и старыми значениями. С объектным источником данных это подключение было простым. –

ответ

3

Вы используете хранимые процедуры напрямую (через SqlCommand) или через LINQ to SQL? LINQ to SQL поддерживает использование хранимых процедур для всего доступа к базе данных. Возможно, вам стоит взглянуть на Updating our Database using Stored Procedures, часть 7 из Scott Guthrie в блоге с сообщением о LINQ to SQL. Вы можете настроить использование sprocs через конструктор DBML или код с помощью частичного класса DataContext. Идея заключается в том, что вы отправляете как новые, так и оригинальные значения (например, Name и OriginalName) в sproc, чтобы он мог проверять свой параллелизм.

Если вы используете sproc напрямую, а не через LINQ к SQL, и все, что вы хотите, чтобы получить исходные значения объекта, вы можете получить их с помощью Table<T>.GetOriginalEntityState() так:

Order modifiedOrder = db.Orders.First(); // using first Order as example 
modifiedOrder.Name = "new name";   // modifying the Order 
Order originalOrder = db.Orders.GetOriginalEntityState(modifiedOrder); 
1

Не ответ, который вы можете искать, но так как вы упомянули, используя WCF, как бизнес-слоя наряду с LINQ2SQL, я чувствовал это моя обязанность указать на эту статью для справки:

http://www.sidarok.com/web/blog/content/2008/05/26/linq-to-sql-with-wcf-in-a-multi-tiered-action-part-1.html

Хотя статья реализует ASP.NET как основной уровень представления, но, учитывая ваш фон, это может заставить статью легче понять.

Я лично занимался тем же самым видом развития, что и сейчас (winforms для клиента, WCF для уровня бизнес-логики, LINQ2SQL для доступа к данным), но будучи полным новичком до WCF & LINQ2SQL в то время, я в основном вынужден для удаления первоначальных значений. Эта статья наиболее близка к вашим потребностям, хотя, честно говоря, я не видел ничего, что работает с использованием хранимых процедур.

-1
  • Ditch sprocs и создать новый DBML-файл для ваших таблиц.
  • Перетащите свои столы и пропустите! LinqToSql создаст классы сущностей для вас с методами обновления (создание и т. Д.).

У LinqToSql есть несколько подходов к параллелизму. Один из перегруженных методов Attach() (используется для обновлений) требует 2 параметра: исходный объект и новый объект. LinqToSql будет делать то, что использовал ObjectDataSource, и сравнить старые значения с новыми исключениями и исключениями параллелизма (он даже упрощает обработку исключений параллелизма +10 .. но это не ваш вопрос).

Use this reference, в частности, секция в направлении дна с полными объектами. Это имеет большой смысл и показывает, как используются разные методы параллелизма и как обрабатывать исключения.

hav fun.

+0

Это подразумевает, что sprocs требуются и не могут быть «отброшены». – Lucas

Смежные вопросы