Multitable object update

by Alexey Shirshov May 06, 2009 13:22

SalesOrder class has two tables as a source. Can we update properties from those two tables and save changes simultaneously? Yes, we can. Suppose we want to change OrderQty and OrderDate property.

        static void Main(string[] args)
        {
            var o = SalesOrder.Query
                .Where(Ctor.prop(typeof(SalesOrder), "SalesOrderDetailID").eq(1))
                .Single() as SalesOrder; 

            o.OrderQty += 10;
            o.OrderDate = new DateTime(2001, 07, 5); 

            using (ModificationsTracker mt = new ModificationsTracker(exam1sharp.Properties.Settings.Default.connString))
            {
                mt.Add(o);
                mt.AcceptModifications();
            }
        }
 

No additional actions required to make it work. You just change object and save it. But OrderQty property stored in SalesOrderDetail table and OrderDate stored in SalesOrderHeader, and so Worm have to create script with two update statements. Furthermore don't forget about calculated fields. The task become complex. Here is the script generated by Worm.


declare @p1 SmallInt;set @p1 = 11
declare @p2 Int;set @p2 = 1
declare @p3 DateTime;set @p3 = 07/05/2001 00:00:00
declare @p4 Int;set @p4 = 1
declare @p5 Int;set @p5 = 1
declare @lastErr int
update t1 set t1.OrderQty = @p1 from Sales.SalesOrderDetail t1 where t1.SalesOrderDetailID = @p2
declare @SalesOrderDetail_rownum int
select @SalesOrderDetail_rownum = @@rowcount, @lastErr = @@error
if @lastErr = 0 update t2 set t2.OrderDate = @p3 from Sales.SalesOrderHeader t2 join Sales.SalesOrderDetail t1 on t2.SalesOrderID = t1.SalesOrderID where t1.SalesOrderDetailID = @p4
if @SalesOrderDetail_rownum > 0 select t2.LineTotal from Sales.SalesOrderHeader t1 join Sales.SalesOrderDetail t2 on t1.SalesOrderID = t2.SalesOrderID where t2.SalesOrderDetailID = @p5

Of course the whole batch executed in single transaction and the error in any line will rollback it.

Tags:

Add comment


(Will show your Gravatar icon)  

Enter the word
captcha word
(hear it spoken)


  Country flag

biuquote
  • Comment
  • Preview
Loading



Powered by BlogEngine.NET 1.4.5.0
Theme by Mads Kristensen | Modified by Mooglegiant

The Author

My name is Alexey Shirshov. I'm a professional developer with wide specialization. I prefer VB.NET to C#, I hate ASP.NET but there is no better than it. You can contact me by this page.