Linq for Entities: Abstractions
Jeremy has a great post summarizing the MVP summit, and he include:
Linq for Entities is much more than an O/R Mapper. It potentially provides us with a unified data access strategy over heterogeneous data sources (web services, xml, non relational databases, etc).
- Web service call is (a remote remote call - extranet/internet)
- Non relational databases
- Hierarchical data stores
- Relational databases
Now consider the following query:
Customer customer = (from c in someHeterogeneousDataSource.Customers
where c.Name == "Ayende" select c).First();
- If the web service expose a GetCustomerByName(), this would be a good candidate, if not, the implementation would need to call GetAllCusomters() and filter it in memory.
- For non relational databases, I am aware of object databases, flat files, temporal and hierarchical (covered seperatedly) - each of which has its own tradeoffs. I am not familiar with object databases to say what the tradeoffs are here, but for a flat file, it is going to be a linear scan. The query is not even a valid one for a temporal database (unless there is an implict CurrentTime).
- For hierarchical data stores, this query would need to iterate all the customers, and compare their name to the query.
- Relational database would think that this is too easy, and quit.
And this is just about the simplest query possible. I can't guess what will happen if I happened to want a join between customer and orders.
I get the feeling that I am missing something here, because it sure isn't heterogeneous to me.