Here’s a really really super-basic question.
Say I wanted to build – today – an enterprise CRUD application in .NET that had an n-tier architecture. What data access approach should I use? I want interoperability, so DataSets are out (and I suppose it’s not 2003 anymore, either). Likewise, .NET RIA Services’ advertised method of exposing its functions, via an additional service, to non-Silverlight clients, doesn’t seem very convincing for update operations. I’ve sort of been able to cobble together something with Entity Framework, which doesn’t have n-tier support OOB and so required lots of weird reflection-type stuff to simulate the semblance of optimistic concurrency (the example in MSDN Magazine doesn’t look like it supports optimistic concurrency. I hear this is improved in EF4, but I’m a little bit skeptical and it’s not really available yet besides in CTP).
So, what can people actually do on their projects for enterprise CRUD with update-checked optimistic concurrency? DataSets? DIY with DTOs and Lord knows how much work involved? And how does that work with bound data? Say I have a collection bound to a DataGrid, do I need to listen to CollectionChanged for changes? Do I need to keep stacks of changes so I can compare PKs if there’s an undo? It seems nightmarish.
And, secondarily, what if update checking for optimistic concurrency weren’t a hard requirement? What then?