Advertisement

03.31.2008 at 08:39AM PDT, ID: 23282867
[x]
Attachment Details
[x]
The Solution Rating System

With so many solutions, how can you tell which solutions are most likely to help you and which ones are not? To provide you with a tool to use, we rate our solutions based on various elements that most accurately determine if a solution is a quality solution. To explain what factors affect the solution rating, here are the elements we take into consideration when formulating our solution rating.

  • The Grade of the Solution
  • The Zone Rank of the Expert Providing the Solution
  • The Number of Author and Expert Comments
  • The Number of Experts Contributing
  • The Feedback of the Community

Your Input Matters
Because of the way the system is set up, the most important variable in this equation is you. As a member of Experts Exchange, you are able to cast your vote on the quality of the solutions in regard to how complete, accurate, helpful and easy to understand each solution is. When you provide your feedback, each rating is adjusted accordingly. So, if you see a solution that has a poor rating that you think is a good solution, let us know by rating it. As you do, the rating will be adjusted and will become more accurate for other members of our site.

If you have any suggestions that you would like to make for our rating system, please ask a question in the Suggestions Zone of Community Support.

Thank you!

Linq DataContext best practices...

Hi,

I have a class that is currently designed to work as follows:

Customer c = Customer.GetByID(5);
c.Name = "John Smith";
c.Save();

I'm moving to linq, so I designed my Customer class as part of a DBML file called cc.  So, my code now looks like this:
cc dataCtx = new cc();
var query = from cust in dataCtx.Customers where cust.ID = 5 select cust;
Customer c = query.First();
c.Name = "John Smith";
dataCtx.SubmitChanges();

This works, as long as I CREATE the DataContext, and update the customer all in the same place.  But what if I write a static method called GetByID(id) like I have right now, then all if the "Getting" code would move INSIDE of the customer class, and I'd have to save the DataContext somewhere in order for it to be available when Save() is called.  Save() would need to call context.SubmitChanges() - but unless I were to save it somewhere (like in the session or something), the context would be long gone by the time Save() gets called.  Certainly it's a totally different scope in the code.

Any suggestions about how to move from my current model to the new linq environment?  What are the "best practice" recommendations for deal with these "DataContexts" that are needed to effectively manage all of this linq data?

Thanks.
Start your free trial to view this solution
Question Stats
Zone: Programming
Question Asked By: kalliopi
Solution Provided By: sjturner2
Participating Experts: 1
Solution Grade: A
Views: 83
Translate:
Loading Advertisement...
03.31.2008 at 02:32PM PDT, ID: 21249388

All comments and solutions are available to Premium Service Members only.

Start your 7 day free trial and see for yourself why Experts Exchange is the easiest and most proven technology resource in the world. Get Started

Already a member? Login to view this solution.

 
03.31.2008 at 08:59PM PDT, ID: 21251168

All comments and solutions are available to Premium Service Members only.

Start your 7 day free trial and see for yourself why Experts Exchange is the easiest and most proven technology resource in the world. Get Started

Already a member? Login to view this solution.

 
04.01.2008 at 01:04AM PDT, ID: 21252055

All comments and solutions are available to Premium Service Members only.

Start your 7 day free trial and see for yourself why Experts Exchange is the easiest and most proven technology resource in the world. Get Started

Already a member? Login to view this solution.

 
04.01.2008 at 08:22AM PDT, ID: 21254823

All comments and solutions are available to Premium Service Members only.

Start your 7 day free trial and see for yourself why Experts Exchange is the easiest and most proven technology resource in the world. Get Started

Already a member? Login to view this solution.

 
04.01.2008 at 08:58AM PDT, ID: 21255226

All comments and solutions are available to Premium Service Members only.

Start your 7 day free trial and see for yourself why Experts Exchange is the easiest and most proven technology resource in the world. Get Started

Already a member? Login to view this solution.

 
04.01.2008 at 12:27PM PDT, ID: 21257242

All comments and solutions are available to Premium Service Members only.

Start your 7 day free trial and see for yourself why Experts Exchange is the easiest and most proven technology resource in the world. Get Started

Already a member? Login to view this solution.

 
 
Loading Advertisement...
Microsoft
  • Internet Protocols
  • Applications
  • Development
  • OS
  • Hardware
  • Windows Security
Apple
  • Operating Systems
  • Hardware
  • Programming
  • Networking
  • Software
Internet
  • Search Engines
  • File Sharing
  • WebTrends / Stats
  • Spy / Ad Blockers
  • Web Browsers
  • New Net Users
  • Web Development
  • Chat / IM
  • Anti Spam
  • Web Servers
  • Anti-Virus
  • Email Clients
Gamers
  • Tips
  • Online / MMORPG
  • Puzzle
  • Emulators
  • Action / Adventure
  • Role Playing
  • Consoles
  • Game Programming
  • Strategy
  • Sports
  • Misc
  • Computer Games
Digital Living
  • Hardware
  • New Net Users
  • New Users
  • Software
  • Digital Music
  • Gaming World
  • Home Security
  • Apple
  • Networking Hardware
Virus & Spyware
  • Vulnerabilities
  • IDS
  • Encryption
  • Anti-Virus
  • Operating Systems Security
  • Software Firewalls
  • WebApplications
  • Cell Phones
  • Operating Systems
  • Internet
  • Hardware Firewalls
Hardware
  • Handhelds / PDAs
  • Displays / Monitors
  • Components
  • Networking Hardware
  • Peripherals
  • Laptops/Notebooks
  • Storage
  • Servers
  • Desktops
  • New Users
  • Misc
  • Apple
Software
  • System Utilities
  • Industry Specific
  • Network Management
  • Photos / Graphics
  • Page Layout
  • VMWare
  • Misc
  • Web Development
  • OS
  • CYGWIN
  • Voice Recognition
  • Message Queue
  • Quality Assurance
  • Security
  • Firewalls
  • MultiMedia Applications
  • Development
  • Database
  • Office / Productivity
  • Business Management
  • OS/2 Apps
  • Server Software
  • Internet / Email
ITPro
  • OS
  • Storage
  • Encryption
  • Operating Systems Security
  • Apple Hardware
  • Laptops & Notebooks
  • Servers
  • Networking Hardware
  • Peripherals
  • Devices
  • Displays / Monitors
  • WebTrends / Stats
  • Search Engines
  • Firewalls
  • WebApplications
  • IDS
  • Vulnerabilities
  • Email Clients
  • File Sharing
  • Spy / Ad Blockers
  • Web Browsers
  • Web Servers
  • Networking
  • Anti-Virus
  • Chat / IM
  • Anti Spam
Developer
  • Web Servers
  • Web Browsers
  • Game Programming
  • Dev Tools
  • Industry Specific
  • Office / Productivity
  • Database
  • CYGWIN
  • Web Development
  • Search Engines
  • File Sharing
  • WebTrends / Stats
  • Programming
  • Content Management
  • Application Servers
  • Protocols
Storage
  • Removable Backup Media
  • Storage Technology
  • Servers
  • Grid
  • Remote Access
  • Backup / Restore
  • Misc
  • Hard Drives
OS
  • Miscellaneous
  • Security
  • Development
  • Linux
  • VMWare
  • MainFrame OS
  • Unix
  • Apple
  • OS / 2
  • AS / 400
  • BeOS
  • Microsoft
  • VMS / OpenVMS
Database
  • Oracle
  • Miscellaneous
  • MySQL
  • Software
  • Sybase
  • Contact Management
  • PostgreSQL
  • Data Manipulation
  • Clarion
  • InterSystems Cache
  • Siebel
  • MUMPS
  • OLAP
  • SQLBase
  • SAS
  • GIS & GPS
  • 4GL
  • Berkeley DB
  • DB2
  • Informix
  • Interbase / Firebird
  • FoxPro
  • Reporting
  • LDAP
  • Filemaker Pro
  • MS SQL Server
  • dBase
  • MS Access
Security
  • Misc
  • Web Browsers
  • Software Firewalls
  • Operating Systems Security
  • File Sharing
  • Spy / Ad Blockers
  • Vulnerabilities
  • WebApplications
  • IDS
  • Anti-Virus
  • Encryption
  • Anti Spam
  • Email Clients
  • VPN
  • Chat / IM
Programming
  • Editors IDEs
  • Installation
  • Handhelds / PDAs
  • Multimedia Programming
  • System / Kernel
  • Algorithms
  • Game
  • Signal Processing
  • Project Management
  • Open Source
  • Database
  • Misc
  • Languages
  • Processor Platforms
  • Theory
Web Development
  • Scripting
  • Blogs
  • Web Servers
  • Software
  • Search Engines
  • Web Graphics
  • Images
  • Internet Marketing
  • Images and Photos
  • Components
  • Document Imaging
  • Web Languages/Standards
  • Illustration
  • WebApplications
  • Fonts
  • WebTrends / Stats
  • Authoring
  • Digital Camera Software
  • Miscellaneous
Networking
  • Protocols
  • Apple Networking
  • Network Management
  • Message Queue
  • Application Servers
  • Content Management
  • File Servers
  • Email Servers
  • Misc
  • Java Editors & IDEs
  • Wireless
  • Networking Hardware
  • Backup / Restore
  • System Utilities
  • ISPs & Hosting
  • Web Servers
  • Storage Technology
  • Removable Backup Media
  • Servers
  • Broadband
  • Grid
  • OS / 2
  • Novell Netware
  • Unix Networking
  • Windows Networking
  • Security
  • Telecommunications
  • Operating Systems
  • Linux Networking
Other
  • Community Advisor
  • Lounge
  • Community Support
  • New Net Users
  • Philosophy / Religion
  • Math / Science
  • Miscellaneous
  • URLs
  • Expert Lounge
  • Politics
  • Puzzles / Riddles
Community Support
  • Suggestions
  • New to EE
  • New Topics
  • Community Advisor
  • CleanUp
  • Announcements
  • General
  • Feedback
  • Input
  • EE Bugs
 
03.31.2008 at 02:32PM PDT, ID: 21249388
The best practice for using Linq in ASP.NET is that to recreate the datacontext for each postback.

"A data context is a unit of work. It tracks changes and submits updates to the Db when flushed. Because of this you should only keep it around long enough to do the work ...but no longer."

These blogs should help you:

http://codebetter.com/blogs/ian_cooper/archive/tags/LINQ/default.aspx
Accepted Solution
 
03.31.2008 at 08:59PM PDT, ID: 21251168
Thanks for the info.  I guess my question is really, if I have an object that has been loaded via some datacontext, but that context is no longer accessible (different scope let's say) - how can the changes to that object updated back to the database? Or do I have to get a new instance of the object in order to update it.  Does my question make sense?
 
04.01.2008 at 01:04AM PDT, ID: 21252055
Yes, there is an Attach method on the datacontext to reattached a disconnected object. This link should explain it:
http://blogs.msdn.com/dinesh.kulkarni/archive/2007/10/08/attach-if-you-have-something-detached.aspx

if you don't want to use this then the other option is to refetch the original object and replay your changes to the fetched object.
 
04.01.2008 at 08:22AM PDT, ID: 21254823
Hi siturner2,

Yeah - I tried the attach method and it generates an errors that the object was loaded using a different context.

I understand the "goal" of these datacontexts, but logistically I'm fairly well confused about how to actually implement it.  Specifically, the link in the first suggestion says that you should avoid caching entities loaded with a datacontext - but that seems to make the whole system fairly useless.

What if I have a method

public User GetUserByID(int id) {
   MyDB db = new MyDB();
   var query = from user in db.Users where user.ID = id;
   return query.FirstOrDefault();
 }

So - in my code somewhere I say:

User u = GetUserByID(5);
u.Password = "foo";

Now I want to save my changes.  The context used to load this object has gone out of scope, is there ANY way to update the object at this point?

Sorry - but I just don't understand the recommended "logistics" of managing the context (which you must have in order to SubmitChanges).  I'm sure that there is a good way to do it, but I don't see how at this point...

ej
 
04.01.2008 at 08:58AM PDT, ID: 21255226
You can attach the updated object to a different datacontext. You need to use the Attach method with asModified as the 2nd parameter and set this to true.
 
04.01.2008 at 12:27PM PDT, ID: 21257242
I'll give that a try - thanks.
 
 
20080236-EE-VQP-29 / EE_QW_EXPERT_20070906