Linq object original value

D

Darren

I need to be able to track the original value of the object. The datacontext doesn't seem to provide any
way to do this, you can get the modified objects but not the original state.

I don't see any way to specify an additional interface for each table using the designer :( If I could
it would be a simple solution.

The concurrency management is lacking, it looks like I can't provide my own concurrency violation
checking or resolution methods.

I could use the PropertyChanged event and hold a copy external to the object but that is a messy hack.
 
W

Wen Yuan Wang [MSFT]

Hello Darren,

According to your description, you want to get the original value of an
object after making modification on it. If I misunderstood anything here,
please correct me.

In Linq to SQL, you can pass the modified entity into
ITable.GetOriginalEntityState() method. This function returns a copy of the
original entity in your DataContext object.

For example:
DataClasses1DataContext dc = new DataClasses1DataContext())
var query = from obj in dc.Table_1s
where obj.c1==2
select obj;
Table_1 job = query.Single();
job.c2 = "10";
Table_1 originalJob=dc.Table_1s.GetOriginalEntityState(job);
System.Console.WriteLine(originalJob.c2);

http://msdn2.microsoft.com/en-us/library/bb534549.aspx
[Table<(Of <(TEntity>)>).ITable.GetOriginalEntityState]

Hope this helps, Please feel free to let us know if you have any more
concern. We are glad to assist you.
Have a great day,
Best regards,
Wen Yuan

Microsoft Online Community Support
Delighting our customers is our #1 priority. We welcome your comments and
suggestions about how we can improve the support we provide to you. Please
feel free to let my manager know what you think of the level of service
provided. You can send feedback directly to my manager at:
(e-mail address removed).

==================================================
Get notification to my posts through email? Please refer to
http://msdn.microsoft.com/subscriptions/managednewsgroups/default.aspx#notif
ications.

Note: The MSDN Managed Newsgroup support offering is for non-urgent issues
where an initial response from the community or a Microsoft Support
Engineer within 1 business day is acceptable. Please note that each follow
up response may take approximately 2 business days as the support
professional working with you may need further investigation to reach the
most efficient resolution. The offering is not appropriate for situations
that require urgent, real-time or phone-based interactions or complex
project analysis and dump analysis issues. Issues of this nature are best
handled working with a dedicated Microsoft Support Engineer by contacting
Microsoft Customer Support Services (CSS) at
http://msdn.microsoft.com/subscriptions/support/default.aspx.
==================================================
This posting is provided "AS IS" with no warranties, and confers no rights.
 
M

Marc Gravell

By example:

Marc

using (NWindDataContext ctx = new NWindDataContext())
{
// prove it only does one SELECT
ctx.Log = Console.Out;

// get the first supplier
Supplier supplier = ctx.Suppliers.First();

// mess with it; note we reset Fax to the original
// value to see if it removes trivial changes
string oldFax = supplier.Fax;
supplier.Fax = "abc";
supplier.Fax = "def";
supplier.Address += "*";
supplier.CompanyName = "Foo";
supplier.Fax = oldFax;

// get a *copy* of the original
Supplier original =
ctx.Suppliers.GetOriginalEntityState(supplier);

// see what exactly changed
foreach (ModifiedMemberInfo member in
ctx.Suppliers.GetModifiedMembers(supplier))
{
Console.WriteLine("{0}:\t{1}\t=>\t{2}", member.Member.Name,
member.OriginalValue, member.CurrentValue);
}
}
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Top