Tuesday, June 19, 2007

LINQ to SharePoint 0.2 Alpha to Meet Major WSS 3.0 Template/Apps Surge

Bart De Smet's LINQ to SharePoint - Announcing the 0.2 alpha release post yesterday and Mary Jo Foley's SharePoint: Microsoft’s Web 2.0 hub column today are an interesting coincidence.

Bart's enhancing LINQ to SharePoint with these new features:

  • Enhanced support for SharePoint list field types, including Lookup and LookupMulti fields with lazy loading support and subquery support
  • Changes to the entity model used by LINQ to SharePoint, in preparation for update support down the road
  • Optimization of the CAML queries generated by the query parser
  • Support for First and FirstOrDefault query operators
  • Introduction of a CamlMethods static class with helper functions, including DateRangeOverlaps
  • Support for Now and Today elements
  • Multiple Where clauses per query are supported
  • SpMetal improvements and separation of front-end and back-end functionality, allowing for hosting of SpMetal functionality in other environments (such as an IDE)

Bart also announced that work is starting on the 0.3 Alpha version that will include update capability. Current code, a draft of the technical spec and the first unit tests for the query parser are available now on his CodePlex site. Final 0.2 Alpha code will be  ready in a few days.

Bart picked a great data domain for his third-party LINQ implementation. SharePoint is getting much more of Microsoft's attention and resources as the company prepares to repulse the attack on its Office hegemony by online competitors Google, et al.

Update 7/26/2007: Jeff Raikes reported during the Microsoft's annual financial analysts conference that SharePoint generated $800 million in revenue during fiscal 2007. (From Joe Wilcox of Microsoft Watch).

SharePoint "Social Computing" Enhancements

Almost simultaneously, Mary Jo Foley announced the availability of the Community Kit for SharePoint (CKS) 2.0 beta, which opened on the CKS CodePlex site Monday. CKS 2.0 adds these features to Windows SharePoint Services (WSS) 3.0 and its big brother, Microsoft Office SharePoint Services (MOSS) 2007:

The Microsoft SharePoint Products and Technologies Team Blog's June 18, 2007 Community Kit for SharePoint 2.0 Pre-Release announcement says:

The ultimate goal of the CKS is to enable community oriented features and solutions by leveraging, enhancing, and extending SharePoint as a social computing platform.

100 "Next-Generation" SharePoint Business Apps Coming

Mary Jo also reports that Derek Burney, general manager of Microsoft's SharePoint Platform and Tools group, will commit today at the Enterprise 2.0 Conference to delivering 100 "next-generation" business applications (not templates) over the next 12 months to SharePoint users for internal use by Microsoft employees.

Sandy Kemsley, who's covering Enterprise 2.0 in her EbizQ Column 2 blog, didn't mention anything about this topic in her Enterprise 2.0: Derek Burney item. The same is true for Michael Sampson (Michael's Thoughts, Notes on Derek Burney, "Amplify the Impact of Your People with Enterprise 2.0 Technologies"), John Eckman (openparenthesis, Liveblogging Enterprise 2.0 - Microsoft’s Derek Burney), and Mike Gotta (Collaborative Thinking, Amplify the Impact of Your People with Enterprise 2.0 Technologies). Michael, John and Mike mention "Next Generation Applications" but not that Microsoft is giving 100 of the them to users.

Update 6/20/2007: According to later reports in Network World (Lotus, Microsoft jostle to land social networking customers by John Fontana)and eWeek (IBM, Microsoft Show Web 2.0 Wares by Renee Boucher Ferguson and Darryl K. Taft) articles, the 100 apps will be for internal use only. Fontana writes:

In addition, Microsoft said it is committing to build 100 social networking business applications before June 2008 for use inside the company. One currently in development is SharePointPedia, which helps users find SharePoint technical and support information from both Microsoft and other sources.

If SharePointPedia is an example, at least some internal apps might make reach SharePoint customers in the form of templates. According to Lawrence Liu's post in the CodePlex site for CKS:SharePointPedia:

Microsoft is embarking on an ambitious project to create an application codenamed "SharePointPedia" that will be used to enable a "community driven and supplemented content lifecycle." ... [I]t's being designed (yes, the project kicked off just last week) to be used primarily by the community. ...

SPP is scheduled to go live ... by the end of October.

Community Kit for SharePoint Background

The Community Kit for SharePoint Vision and Scope Document describes CKS:

At the most basic level, the CKS is a site template that enables practically anyone to create very quickly a functional community website on Windows SharePoint Services 3.0 or Microsoft Office SharePoint Server 2007. The “Standard Edition” will require nothing more than the out-of-the-box Web Parts that come with WSS 3.0. In this way, the CKS:SE is just like the Application Templates for WSS, but that is where the similarity ends.

Instead of being solely developed by Microsoft, the CKS will be a collaborative development project hosted on CodePlex, an online software development environment for open and shared source developers to create, host, and manage projects throughout the entire software development lifecycle.

Here's the CKS vision statement from Project Management and Evangelism Lead Lawrence Liu:

  • A set of best practices, templates, Web Parts, tools, and source code that enables practically anyone to create a community website based on SharePoint technology for practically any group of people with a common interest.
  • A technology framework that sits on top of Windows SharePoint Services or Office SharePoint Server and can be further customized or extended to suit the community website implementer’s needs.
  • A shared source community development project that is provided at no cost and allows anyone to use for commercial or non-commercial purposes.

As mentioned in the earlier Vision and Scope Document quote, you don't need to run a pricey Microsoft Office SharePoint Server (MOSS) 2007 version:

Targeted Platform: Given that Windows SharePoint Services 3.0 was released on November 16, 2006 and is available for free to licensed customers of Windows Server 2003, the development efforts on the CKS should be targeted at this version of SharePoint. Opportunities for “feature light up” when Office SharePoint Server 2007 is present should also be considered.

Just Say No to Web and Enterprise Two-Point-Oh?

"Web 2.0" and "Enterprise 2.0" are two terms that I've come to distrust—if not despise—as overhyped and basically without meaning. However, Dion Hinchcliffe's May 2006 A round of Web 2.0 reductionism item and July 2006 Enable richer business outcomes: Free your intranet with Web 2.0 post shed some light on the two topics in the enterprise.

Sunday, June 17, 2007

Entity Framework: Complex Types Redux in Beta 2

The June 2006 ADO.NET Tech Preview: Entity Data Model specification asserts: "An EntityType can have one or more properties of the specified SimpleType, ComplexType, or RowType. Properties can be either single-valued or multi-valued." I've assumed (until now) that the Entity Framework (EF), which implements the Entity Data Model (EDM), supported complex types.

Eric Evans calls complex types value objects in Domain-Driven Design: Tackling Complexity in the Heart of Software and defines them as follows:

An object that represents a descriptive aspect of the domain with no conceptual identity is called a VALUE OBJECT. VALUE OBJECTS are instantiated to represent elements of the design that we care about only for what they are, not who or which they are.

The classic value object that appears in most domains is an Address type. In ordinary contexts, the Address instance that Order.ShipAddress or Vendor.Address represents isn't important if the Address property values are correct. The existence of multiple instances of the Address type having the same or slight variation in property values (such as ST and Street or E and East) isn't significant. However, Address is an entity for gas, water, electric, telephone, and cable TV utilities because it represents a service and billing endpoint and might be the location of a utility's assets, such as a set-top box.

I also assumed that I'd need the missing EDM Designer to define complex types because the current (Beta 1) EDM Wizard doesn't have a feature to define a table as persisting a ComplexType or group table fields to generate a property of the ComplexType. I didn't want to spend the time to research the syntax and hand-code the mapping (MSL) and conceptual (CSDL) layer XML files to test a feature that might change in the EF CTP promised for June.

So I was surprised to learn from Danny Simmons' Non-scalar Value Objects aka "Complex Types" post of late last night that the EF doesn't support complex types. I cringed as I read:

At the moment the EF CTPs do not support complex types, and someone has asked for that feature we just can't support. [Emphasis added.]

Why can't we support it?  Well, first off the lack of a property or properties that can be the key is fundamental.  Secondly, if you think about it, what would insert and delete operations that affect one but not both of the entities in a row really mean?  Things get crazy really quick.

I fully expected to see the persistence ignorance (PI) ruckus raised anew with even greater ferocity. The inability to generate a property of the ComplexType from a group of fields in the table that persists the containing entity appeared to me to be an especially egregious failure to support PI.

Earlier in the post, Danny had mentioned that "the system doesn't let you map two entities to the same row in the same table." That restriction didn't appear to me to prevent mapping an entity and one or more complex types to a single row. For example, a SalesOrder entity might have BillAddress and ShipAddress complex types. Something wasn't adding up here.

Finally, I read the [April Fool!] punch line:

Fortunately, we did decide to implement complex types, and they will appear in an upcoming CTP.

Update 6/18/2007: Danny says in his comment that he intends to clarify his post.

Here's the full story from Danny's answer to Szymon Kobalczyk's June 15, 2007 EDM: Mapping two entities from single table message in the ADO.NET Orcas forum:

A complex type is a value type that does not have identity of its own but it does have structure.  You can define a complex type for address info, and that type can appear as a property of one or more entities.  When we generate code for the model you will have a separate class for the complex type and it will appear as a direct member of the entity class, so you will get a structure much like you define above, but you won't actually have a navigation property from the supplier to the address you would instead just have a property of the supplier whose type is an address. 

With complex types you can actually map a complex type's properties to different columns in the same row with the entity that contains the type--in fact the identity of the complex type is slaved to the identity of the entity which contains it so it must be part of the same row (or rows in multiple tables if you are using entity splitting or table-per-type inheritance or something like that where parts of a single entity appear in multiple tables). 

The nice thing about this kind of construct is that you can fill out the address class with methods and validation and such and share that logic across all instances of an address regardless of which entity type they appear in--it's just that each of those instances is merely a part of the containing entity rather than an entity of its own.

It's my suspicion that the 2nd approach is what you want, but you'll just have to wait until beta 2 before that's available.

The ability to validate a common Address type, as well as AddressUS, AddressCA, AddressUK, AddressEU, etc. subtypes, is an extremely important feature of object/relational mapping (O/RM) tool. EF's complex types support inheritance, according to the spec. Value objects usually map to NHibernate components. I'm not certain how LLBLGen Pro handles them. Frans?

Recursive complex types (a complex type containing a complex type) would be nice in v1. They're presently in the spec's "EDM Future Directions" section, along with conditional association, many-to-many relationships with payload, n-ary relationships, relationship inheritance, and dynamic entity extensibility.

Update 6/18/2007: Danny Simmons' comment indicates that v1 won't implement ComplexType inheritance but will support recursive (nested) complex types. I'd gladly forego ComplexType nesting for inheritance and I believe most other EF users would, too.

Recommended Reading: Agile Joe [Ocampo] has almost-chapter-length posts about entities and value objects with different analogies, as well as domain-driven design as a whole. He offers a substantial number of posts about NHibernate, also. (Some of Joe's posts are even longer than mine.)

More Recommended Reading: John Papa says today that his July 2007 Data Points column has been posted to the MSDN Magazine Web site as "ADO.NET Entity Framework Overview". MSDN should have given him the 7,000 words from his draft version. I was surprised to see  "ADO.NET in the next release of Visual Studio® code-named 'Orcas' features the new Entity Framework" in the online lead, because the Entity Framework hasn't been a part of VS 2008 since April 28, 2007.

Thursday, June 14, 2007

Sahil Malik Takes on LINQ, LINQ to SQL, and Entity Framework

From the "How Did I Miss This?" department. (I subscribe to Sahil's blah!bLaH!BLOG from IE7, but his June 9, 2007 post in question probably was buried under a long SharePoint entry. Thanks to Sam Gentile for yesterday's New and Notable item, which also includes a link to Ian Cooper's June 10, 2007 Being Ignorant with LINQ to SQL post, the subject of this review.)

ADO.NET and SharePoint guru Sahil Malik's My Views about the ORM space, Entity Framework and all such stuff! dissertation on Microsoft's "New Generation Data Access" efforts for ADO.NET 3.5 delivers the following conclusions:

  • LINQ is Microsoft's latest "making a molehill from a mountain" project.

"What LINQ does give me, is a way to simplify my code for about 10-20% of the use cases in my code. It will revolutionize the 10-20%, but really - in an entire project - 10-20% of a revolution that took 3 years to incubate? I'm beginning to not get impressed."

  • LINQ to SQL isn't a production-grade technology. 

"LINQ to SQL is great for scratch and sniff - concept projects. ... LINQ to SQL is to .NET 3.5, what TableAdapters were to .NET 2.0. In my honest and not so humble opinion, most production projects will and should stay away from it."

  • The Entity Framework and Entity SQL get Sahil "really excited."

"The whole concept of the Entity Data Mapper, the Mapping provider, Entity Model and the best thing around—Entity SQL—are quite awesome. ... eSQL is what differentiates Entity Framework from the rest of the ORMs. eSQL is quite kickass. eSQL + LINQ gives you the organizability(!?) of C#, and the ease of Foxpro. What is there not to like? ... 

I am quite disappointed to learn that it won't be a part of Orcas. ... I am bored of data access, and will continue to watch it from the sidelines until we have some serious progress on the only one possible MSFT winner out of the above at this time, the Entity framework."

Yet Sahil finally concludes:

Note that LINQ will also fly, but IMO is a different animal and has nothing to do with Data Access. But really, LINQ isn't that big or complex (or even impressive! :-/).

Sounds like damnation by faint praise (or weak condemnation) to me.

LINQ and Data Access

Sahil is right; LINQ has nothing to do with data access.

LINQ is an enabling technology for applying a common SQL-like query syntax to a wide variety of data domains. LINQ's strongly typed queries consist of C# 3.0 or VB 9.0 keywords so they're checked at compile time—not runtime—and provide IntelliSense and statement completion.

LINQ to SQL is simply a domain-specific LINQ implementation. LINQ to Entities is another domain-specific implementation. There are many third-party LINQ implementations in process, including Ayende's LINQ to NHibernate and Bart De Smet's LINQ to SharePoint.

Note: Forgot to mention in prior posts that Bart De Smet is going to work for Microsoft's WPF team in the Developer Division. Hopefully, he'll continue working on this third-party LINQ implementations.

Update 6/16/2007: Bart says in this comment that he plans to continue work on his LINQ implementations after moving to Microsoft in October and that an update to LINQ to SharePoint is scheduled for this month.

Update 6/17/2007: True to his word, Bart posted a set of samples that illustrate how to use LINQ to Sharepoint today. (I bet he'll miss the moules aux vin blanc from the joints off the Grand Place like Chez Leon on the petit rue des Bouchers or less touristy places in the outskirts of Brussels.)

LINQ also is responsible for adding many new constructs to C# 3.0 and VB 9.0, including some from functional languages, such as Haskell:

  • Local variable type inference implemented by C# 3.0’s var and VB 9.0’s Dim keywords to shorten the syntax for declaring and instantiating generic types and support anonymous types
  • Object initializers to simplify object construction and initialization with syntax similar to array initializers
  • Collection initializers to combine the concept of array initializers and object initializers and extend it to generic collections
  • Anonymous types to define inline CLR types without writing a formal class declaration for the type
  • Lambda expressions to simplify the syntax of C# 2.0’s anonymous methods, deliver inline functions to Visual Basic developers, and aid type inference and conversion for expression trees
  • Extension methods to enable chaining of extensions that add custom methods to a CLR type without the need to subclass or compile it

However, Sahil complains in his May 12, 2007 A different point of view post (linked from my New Series on Closures in Visual Basic 9.0 item) that:

It's a shame that the language is getting so complex. This is the same mistake C++ made 7 years ago, and why .NET was so successful. It's a shame that we are seeing the same mistake being made all over again.

It seems to me that LINQ and its query expressions make the language simpler by cloaking the complexity of some of these new language features with "syntactic sugar." Sahil seems to abandon his "LINQ has nothing to do with data access" point when he says:

Finally, don't forget - LINQ doesn't buy you any performance gain, or set based theory like Foxpro did, it is more or less syntactical sugar and bunch of .NET code under the scenes that you didn't have to write. [Emphasis added.]

And Sahil did say earlier that that LINQ "gives you .. the ease of Foxpro," which implies the relational data domain to me.

Sahil on Entity SQL as the "Best Thing Around"

I believe Sahil waxes a bit too enthusiastic when describing Entity SQL (eSQL) as the "best thing around" in his paean to the Entity Framework. Apparently, he missed the several posts that mention omission of Data Management Language (DML) constructs (INSERT, UPDATE and DELETE) from eSQL v1. Perhaps most of his work involves read-only data access. Microsoft recommends using the ObjectContext—presumably with LINQ to Entities for UPDATEs and DELETEs—for DML operations.

Erik Meijer, known as the "Creator" of LINQ, has these plans for updatable views and O/R mapping in LINQ 2.0:

Just as we provided deep support for XML in Visual Basic, in LINQ 2.0 we hope to directly support relationships and updatable views at the programming-language level. In that case, we only need a very thin layer of non-programmable default mapping at the edge between the relation and object world and allow programmers to express everything else in their own favourite LINQ-enabled programming language. The result is that just as LINQ 1.0 side-stepped the impedance mismatch “problem” with something better (monads and monad comprehensions), LINQ 2.0 will sidestep the mapping “problem” with something better (composable and programmable mapping).

It sounds to me as if LINQ 2.0 might transcend eSQL and potentially replace the Entity Framework.

Comments Tell the Tale

Sahil's post had 16 comments on June 14, 2007, many of which were from .NET luminaries, such as Don Damsak (donxml), Aaron Erickson (author of the i4o LINQ indexing extension), Ian Cooper, and Frans Bouma (lead developer of the LLBLGen Pro O/RM). I have the feeling that this post caused (or at least contributed to) Ian's Being Ignorant with LINQ to SQL post. The comments include this astounding claim by Damon:

No vendor (open source or for purchase) has anything now production quality except NHIbernate that can really call itself an ORM

Sahil's item also elicited a Sahil on O/RM response from Ayende and this comment from Sahil:

eSQL gives you runtime ability to run queries against your objects.

You might suggest that LINQ does the same, but not really. eSQL gives you the ability to truly bring set based theory into higher level programming languages. There is a query optimizer built into the eSQL framework, so the queries on your object model take advantage of db concepts.

This is something current ORMs cannot do.

Secondly, I am pretty firm on my LINQ to SQL views - I am pretty sure of that.

The Entity Framework's EntityCommand and ObjectCommand objects take eSQL strings and bring no more "set based theory into higher level programming languages" than T-SQL or PL/SQL strings do. Only LINQ incorporates a query syntax "into higher level programming languages" (e.g., C# and VB). That's LINQ's claim to fame and the objective of LINQ to Entities.

The way I understand the plan is: eSQL is an SQL dialect that enables querying the entities defined by the conceptual schema layer of the Entity Data Model (EDM) by CSDL (Conceptual Schema Definition Language) or against the optional Object Services layer's ObjectContext. A command tree in the EntityClient's custom query pipeline for the RDBMS (limited to SQL Server 200x and SQL Server Express Edition at present) translates eSQL to the RDBMS's SQL dialect. Query optimization, if any, takes place on the database server. 

I have my doubts that eSQL will become the lingua franca of "SQL for Entities" any time soon, although IBM, Oracle, MySQL and others appear to be developing custom EntityClient implementations. IBM's interest appears to be LINQ-enabling DB2; the remaining third-parties haven't stated their goals.

Update 5/15/2007: LINQ to SQL architect Matt Warren elaborates in this comment on eSQL and confirms that eSQL doesn't include a query optimizer.

Michael Pizzo offers an architect's view of the Entity Framework with emphasis on inheritance in his "An Application-Oriented Model for Relational Data" article for Microsoft's The Architectural Journal #12. He says the following about Client Views generated by eSQL:

The Entity Framework uses a Client View mechanism to expand
queries and updates written against the conceptual model into
queries against the storage schema. The expanded queries are
evaluated entirely within the database; there is no client-side query
processing. These Client Views may be compiled into your application
for performance, or generated at runtime from mapping metadata
provided in terms of XML files, allowing deployed applications to work
against different or evolving storage schemas without recompilation.

Update 5/14/2007: Entity Framework developer Danny Simmons clarifies the relative ease with which third parties can develop EntityClients for their RDBMSs in this comment.

LINQ to Entities and LINQ to SQL are analogous implementations; their command trees translate LINQ expressions to eSQL and T-SQL respectively. From what I've seen of eSQL, I would use LINQ to Entities unless there was some eSQL construct I badly needed and LINQ to Entities couldn't translate it. (Such a issue would appear to me to qualify as a bug.)

Microsoft Issues Hotfix for SQL Server 2005 Ordered View and Inline Function Issue

My September 11, 2006 SQL Server 2005 Ordered View and Inline Function Problems post described a change of behavior between SQL Server 2000 and 2005 when displaying views created with a SELECT TOP 100 PERCENT ... ORDER BY Whatever query: SQL Server 2000 sorts the resultset and SQL Server 2005 [Express] doesn't.

The post received many comments, including several that objected to my claiming this behavior was an issue for SQL Server users because the behavior was by design. Unfortunately, comments posted before the change of the OakLeaf blog format were lost in the transition to the wider page.

Yesterday Microsoft issued a hotfix, FIX: When you query through a view that uses the ORDER BY clause in SQL Server 2005, the result is still returned in random order, which is only available from Microsoft Support, describes the following Symptoms:

You have a view in a database in SQL Server 2005. In the definition of the view, the SELECT statement meets the following requirements:

  • The SELECT statement uses the TOP (100) PERCENT expression.
  • The SELECT statement uses the ORDER BY clause.

When you query through the view, the result is returned in random order.
However, this behavior is different in Microsoft SQL Server 2000. In SQL Server 2000, the result is returned in the order that is specified in the ORDER BY clause.

The hotfix involves modifications to 11 files, including Sqlservr.exe and the workaround described in my post is simple, so Microsoft must have received many complaints about the problem.

Thanks to IDisposable (Marc Brooks) for the heads-up on the hotfix.

Technorati tags: , , , , , , , , , , , , , , ,

Monday, June 11, 2007

Ian Cooper Takes on DDD, TDD and PI with LINQ to SQL

UK developer Ian Cooper posted Sunday a detailed analysis of how LINQ to SQL fits into domain-driven design (DDD) and test-driven development (TDD), and then raises the issue of the LINQ implementation's persistence ignorance (PI). His bio says:

Ian has over 15 years of experience delivering Microsoft platform solutions in government, healthcare, and finance. During that time he has worked for the DTi, Reuters, Sungard, Misys and Beazley delivering everything from bespoke enterprise solutions to 'shrink-wrapped' products to thousands of customers. Ian is a passionate exponent of the benefits of OO and Agile [programming]. He is test-infected and contagious. When he is not writing C# code he is also the and founder of the London .NET user group.

DDD and TDD

Ian's Being Ignorant with LINQ to SQL essay starts by contrasting the data-centric versus domain-centric design approaches: "Data-centric designs tend to flow the relational model into the code" while "[t]hose who tend to be domain-centric flow the domain model out to their persistent store." Ian classifies LINQ to SQL "as a domain-centric tool because of its design goal of making it possible to share on[e] query syntax across many collection types and in the feature set provided by data context." The capability to employ a common set of LINQ queries over in-memory collections and the persistent store is critical to his final conclusion:

LINQ to SQL is usable with a TDD/DDD approach to development. Indeed the ability to swap between LINQ to Objects and LINQ to SQL promises to make much more of the code easily testable via unit tests than before. [Emphasis added.]

Ian goes on to analyze LINQ to SQL's feature set in terms of patterns from Martin Fowler's Patterns of Enterprise Application Development. This is the first example of such an analysis that I've seen for LINQ to SQL. I wouldn't characterize the ActiveRecord pattern, which Ruby on Rails and MonoRail use, as domain-centric. As Ian notes in a reply to Gregory Young's comment:

I understand some folks like ActiveRecord, but I think it has issues for PI, because it is usually intrusive into the domain classes via a template method or reference to protected variables.

Update 6/12/2007: In a 6/12/2007 reply to a comment from Gregory Young, Ian agrees that ActiveRecord is data-centric.

I've added a request that the ADO.NET team provide a similar analysis for the Entity Framework (EF) and Entity Data Model (EDM) as #17 to my suggestions for Defining the Direction of LINQ to Entities/EDM.

Persistence Ignorance

He tests LINQ to SQL against Jimmy Nilsson's eight conditions that preclude persistence ignorance and concludes:

LINQ to SQL scores pretty well against the PI checklist. As always there are trade-offs where performance can be obtained by specific features. It would be nice if we could choose to trade off lazy loading for standard collections so that we could obviate the need to use specific collection types for associations unless we needed lazy loading, but otherwise there is nothing to complain about here.

The "specific collection types" Ian refers to are EntityRef and EntitySet for associations. A reader named Wuz notes can be replaced by a plain object reference and and a list type, if you don't mind giving up lazy loading and specifying the entities to load with DataShape [to become DataLoadOptions in Beta 2 and later.]

There's been little or no discussion up to this point about PI in LINQ to SQL. The lack of interest on the part of the participants in the PI in EF and EDM controversy probably is due to LINQ to SQL's permanent connection at the hip to SQL Server 200x.

TDD and Code Generation

Ian isn't a fan of code generation for creating classes or databases:

This article is about a TDD approach to using LINQ which means that I am not using the code-generation made available through the designers in Orcas. ...

SQLMetal provides code generation support for strongly typed data-contexts in LINQ to SQL (for both mapping file and attribute based approaches); Orcas will ship with designers for people who don't like working with a command line. I prefer to avoid them for anything that is not demo based or first-cut.

He then goes on to describe his approach to TDD with LINQ to SQL and LINQ to Objects and demonstrates how to switch between an in-memory repository and the persistent store (SQL Server) for test doubling.

The Entity Framework versus LINQ to Entities

Ian is a proponent of LINQ to SQL and an Entity Framework detractor. In an earlier LINQ to Entities and Occam's Razor post, which I quoted in my LINQ to SQL:Entity Framework::REST:SOAP? entry, he says:

The key to most ORM toolsets adoption is the productivity benefits they bring and the clean programming model - persistence ignorance - that they support. When I look at LINQ to Entities I see the former being dragged-down by additional abstractions and in the latter case entirely absent; by contrast, LINQ to SQL hits both of these spots.

LINQ to Entities is overcomplex for many needs and its use in many scenarios defies Occam's Razor - Entities should not be multiplied beyond necessity. For simple mapping scenarios, LINQ to Entities feels bloated and I don't want to use until I have to use it. The very design goals for LINQ to Entities preclude it ever being a simple solution.

He then goes on with a plea to Microsoft to enable LINQ to SQL for databases other than SQL Server. I agree that EF and EDM are far too heavyweight approaches to ordinary object persistence needs and that a single-file or attribute-based approach is likely to satisfy 90% of developer's needs for an object/relational mapping tool. But it won't if it's locked into SQL Server 200x. It's especially surprises me that the ADO.NET team would choose EF and EDM over LINQ to SQL as the O/RM tool for their lightweight SQL Server Compact Edition.

Note: It took 13 seconds to dynamically generate a default EDM for the Northwind database in my test of Using the Entity Framework with IronPython 1.1 in Project Jasper. This is considerably better than the approximately 30 seconds it took in Sam Drucker and Shyam Pather's DEV18 - Rapidly Building Data Driven Web Pages with Dynamic ADO.NET MIX07 video (19:17 to 19:47).

You can read more about Microsoft's travels from persistence schizophrenia to persistence parsimony with LINQ to SQL here: Future LINQ to SQL Support for Multiple Databases?

Wednesday, June 06, 2007

Tech●Ed 2007 Coverage from FTPOnline

Redmond Media Group's FTPOnline columnists (including me) are covering Tech●Ed 2007—the 15th Anniversary of Microsoft's yearly technical conference—for the .NET Insight newsletter's "Tech●Ed Show Daily" issues. (Updated June 8, 2007.)


From the June 5, 2007 .NET Insight "Tech●Ed Show Daily" issue:

Muglia Maps Microsoft's 'Journey Towards Dynamic IT'

The traditional "vision" keynote gives way to optimization, virtualization and standardization of existing IT infrastructure along with new agile business processes and modeling to reverse the 70/30 ratio of IT maintenance to new solution spending at Tech●Ed's 15th anniversary.

Hot at Tech●Ed 2007: SQL Server 2008

The next version of SQL Server will deliver native data types for documents, filestreams and geocoding, provide policy-based management, support the Entity Data Model (EDM) and Language Integrated Query (LINQ), and integrate with Microsoft's enhanced business intelligence (BI) offerings.

Click here for a table of Tech●Ed sessions about SQL Server 2008 and implementing business intelligence projects.


From the June 7, 2007 .NET Insight "Tech●Ed Show Daily" issue:

Hot at Tech●Ed 2007: Introducing the Entity Framework and LINQ

The Entity Framework (EF) and Language Integrated Query (LINQ) are two new technologies in Visual Studio 2008 that form one of the Pillars of SQL Server 2008 (formerly "Katmai"): Dynamic Development. Both play nicely with SQL Server 2005 and 2000, too.

Click here for a table of Tech●Ed sessions about the Entity Framework and LINQ.

Exploit SQL Server Compact Edition and Occasionally Connected Systems

SQL Server Compact Edition v3.1 and v3.5's free license covers deployment on Windows PC clients as well as devices, so you can take advantage of this lightweight, in-process relational database as a local data cache and automatically synchronize its data with a back-end SQL Server 200x instance.

Click here for a table of Tech●Ed sessions about SQL Server Compact Edition, data synchronization, and occasionally connected systems.

Video: Preview SQL Server 2008's Database Engine (01:04:00)

Christian Kleinerman, group program manager of Microsoft's Relational Engine Team, offers a first look at SQL Server 2008, formerly code named "Katmai." Specifically, his presentation at VS Live! Orlando delivers a high-level overview of enhancements to the relational database engine. (Taped May 8, 2007.)


Note: Visual Studio Magazine has become a controlled-circulation publication. Sign up now for your free subscription.

Click here to sign up for any or all of Redmond Media Group's Insight Newsletters:

  • .NET Insight—Takes subscribers through the maze of Visual Studio and .NET technologies, from development tools and platforms to hosted Web services and migration strategies. Published weekly.
  • Java Insight—Delivers the latest news, trends and techniques for creating enterprise Java applications, including technologies like J2EE, Web services, JSP, wireless systems and much more. Published weekly.
  • Web Design & Development Insight—Delivers proven tactics for creating intuitive and reliable sites. Published monthly.
  • Enterprise Architect Insight—Provides enterprise architects with information on technologies and techniques that are shaping the design and integration of enterprise systems today. Published twice monthly.
  • Upside Business Insight—Takes you behind the news and technologies that are shaping the high-tech industry. It will help you gain insights on who is shaping technology and where the industry is going, so you can better plan your IT efforts. Published monthly.
  • SQL Pro Insight—Provides essential content on SQL Server to help with your database administration and programming needs. Get tips on performance, management, security, and more. Published twice monthly.
  • Eclipse Insight—Provides information on the Eclipse platform, including new projects and technologies that shape this exciting trend. Published monthly.

Tuesday, June 05, 2007

LINQ to XSD Preview Alpha 0.2 for Orcas Beta 1 Available

Ralf Lämmel has posted an updated LINQ to XSD Preview Alpha 0.2 version that's compatible with LINQ to XML in Orcas Beta 1. The download date is 5/24/2007, but Ralf's LINQ to XSD Preview Alpha 0.2 to go with Orcas Beta 1 post didn't appear on the XML Team's blog until today. This drop updates the Alpha 0.1 version for the LINQ May 2006 CTP.

Ralf says the functionality is the same as version 0.1 for the March 2007 CTP and suggests that users read the updated “Revealing the X/O impedance mismatch” whitepaper. Ralf equates LINQ to XSD with the Philosopher's Stone, an analogy with which I agree (at least for LINQ to XML), by the paper's title to "Revealing the X/O impedance mismatch: Changing lead into gold."

According the to the ReadMe.htm file, version 0.2 offers the following features:

  • Comprehensive and canonical XML-schema-to object-model mapping.
  • The generated classes model typed views on XML trees.
  • Typed descendant and ancestor axes on XML object types.
  • Discoverable object models including tool tips for XML schema constraints.
  • Visual Studio integration through project templates with build tasks.
  • Command-line interface for mapping tool.

Alpha 0.2 offers very limited support for VB 9.0, to wit:

  • Code generation emits only C# classes.
  • To use LINQ to XSD with VB, you must generate a C# library and add it to your VB project.

My initial tests with relatively simple XML files and queries, functional construction, and literal XML file generation indicate that the Alpha 0.2 bits are stable.

Here are the two previous OakLeaf posts about LINQ to XSD:

The December post has a substantial bibliography for LINQ to XSD and related topics.

Here's hoping that LINQ to XSD will move from the incubator to full-fledged Beta status with VB support in the near future. 

Saturday, June 02, 2007

Entity Framework Updates

It's been a busy week for the Entity Framework (EF) and its components. If you're on your way to or at Tech*Ed 2007, you might find the information below useful when attending any of these LINQ and EF-related sessions:

Session Description
DAT04-TLC ADO.NET Entity Framework: Provider Model and Integration with Third-Party Databases
DAT318 Applied ADO.NET Entities: How to Leverage the Entity Framework in Your Application
DAT319 ADO.NET Entity Framework 1: Introduction
WEB308 Building a Complete Web Application Using ASP.NET "Orcas" and Microsoft Visual Studio Code Name "Orcas" (Part 2 of 2)
DEV319 LINQ and XML for the Microsoft Visual Basic Developer
DEV324 The .NET Language Integrated Query (LINQ) Framework
DEV332 XAML As a Better Microsoft Visual C# (Includes LINQ content)
DEV348 Using the .NET Language Integrated Query (LINQ) Framework with Relational Data
  Hands-On Labs
DAT06-HOL Understanding the ADO.NET Entity Framework
DEV19-HOL Introduction to LINQ
DEV20-HOL Mapping Your Objects to Database Tables with LINQ to SQL

6/3/2007: LINQ to Streams (SLinq) and LINQ to Expressions (MetaLinq) added to Third-Party LINQ Providers Post

An "appalling lack of documentation," as Oren Eini calls it, hasn't thwarted the work of third-party LINQ providers for specialized data domains. There now are 10 third-party LINQ providers and one helper (indexing) class listed on the Third-Party LINQ Providers page. A search of the CodePlex site on LINQ returned 15 projects as of 6/3/2007.

6/2/2007: The ADO.NET Team's Response to Defining the Direction of LINQ to Entities/EDM

ADO.NET architect Mike Pizzo responded in detail to my in absentia feedback for the Tech*Ed "focus group on LINQ/EDM ... to help define the direction of LINQ to Entities" in this long comment to my May 29, 2007 post. It's a great read for EF enthusiasts (and doubters)!

6/2/2007: Danny Simmons Now Groks Persistence Ignorance

One of my requests in my LINQ to Entities/EDM feedback was to "Respond formally to the concerns about lack of persistence ignorance and other issues voiced by the "O/RM Mafia" at the last MVP Summit in Redmond. Both Mike and Danny Simmons responded on the same day. Mike said:

The “O/RM Mafia” has been extremely effective in influencing our Object Services Dev Lead. I’m not sure what they have over him, but he’s totally bought into the idea of persistence ignorance (he’s said more than once that if only he’d “gotten” it a year ago, we would have gone a very different direction). Though I can’t say we’ll reach full persistence ignorance for V1, we are actively working on removing dependencies on domain classes in our remaining milestones.

Danny Simmons posted Persistence Ignorance: OK, I think I get it now early this morning (but not as early as Mike's comment), as promised in his March 28, 2007 A delay before I write more about persistence ignorance... post (shortly after the MVP summit ruckus.) Here's the takeaway:

So, to sum it all up, message received: persistence ignorance is needed, and we're now working to deliver it.  The first release of the entity framework likely will not have full support for it (there's just not enough time), but we will work to get into the first release the key changes which could not be made later so that the stage is set for the next release.

EF v1 might be a somewhat leaky abstraction but subsequent releases should deliver "'pure POCO', persistence ignorant domain models" to the agile-programming and domain-driven-design crowd, hopefully without a crippling performance hit.

Update 6/3/2007: Fixed Danny Simmons' name. Sorry about that, Danny.

6/1/2007: IBM, Oracle, and MySQL Will Support the Entity Framework

IBM's interest in LINQ and writing a EntityClient provider has been known since the last Entity Data Model "ProviderFest" but, in the words of Christian Shay, Oracle's Product Manager in the .NET and Windows group, "I think Oracle is keeping their level of support secret."

Oracle will be one of the presenters at Tech*Ed's DAT04-TLC: "ADO.NET Entity Framework: Provider Model and Integration with Third-Party Databases" chalk talk on Friday, June 8 from 1:00 PM to 2:15 PM in Blue Theater 12. Mike Pizzo says in reply to my point 13 on Oracle:

We have had two “ProviderFests” where vendors have come to Redmond for a week at a time to extend and test their providers with the latest Entity Framework bits and give us feedback. SQLite has already posted a version of their provider that works with the Entity Framework beta, and IBM, DataDirect, Oracle and MySQL will all join me for a chalk talk at TechEd on Friday to discuss their experiences extending their providers for the Entity Framework. [Emphasis added.]

Hopefully, the MySQL representative will demonstrate their EntityClient provider. David Sceppa's new blog contains updates to the status of third-party EF data providers.

Update 6/15/2007: David Sceppa reports in his TechEd: Provider Writers Talk About the Entity Framework post that IBM "demonstrated an early build of their provider working with the 101 LINQ to Entities samples." MySQL missed the session "due to scheduling problems but they are still very much involved."

Update 6/16/2007: Mike Pizzo expands on David Sceppa's report with brief details of DAT04-TLC presentations by DataDirect Technologies, Sybase, Oracle, and VistaDB in his Database Vendors Discuss the Entity Framework and LINQ at TechEd post of 6/15/2007 in the ADO.NET blog. As far as I can determine, this is the first mention of Sybase as participant in the EntityClient provider program. Mike also confirmed IBM's intention to add EntityClient and LINQ support to their Informix ADO.NET Data Provider.

5/31/2007: Matt Warren Writes "The Origin of LINQ to SQL" with a Dash of ObjectSpaces and WinFS Spice

The father of LINQ to SQL tells the inside story of how LINQ to SQL and LINQ itself came to be, describes how ObjectSpaces was drawn into the black hole of WinFS, and discloses that Microsoft's second attempt to productize an object/relational mapping (O/RM) tool started "the political nightmare that became [his] life for the next three years."

I'm sure all of us in the LINQ camp would enjoy more details on the three-year "political nightmare."

I had to make a few changes in my post about Matt's article as a result of Mike Pizzo's comment. 

Update 6/8/2007: Matt added a detailed LINQ to SQL: The Mapping Engine post on 6/6/2007 and the IQueryable’s Deep Dark Secret exposé on 6/1/2007.

5/31/2007: .NET Rocks Presents Frans Bouma on LLBLGen

Frans Bouma is the lead developer of LLBLGen Pro, a popular commercial object/relational mapping (O/RM) tool for .NET and one of about 40 O/RM apps listed in the Object-Relational-Mappers category of Fabrice Marguerie's SharpTools directory. Frans has been critical of the Entity Data Model and its Object Services layer's design since Microsoft first announced the EF. The interview with Frans starts at about 14:30. (Start there to learn what LLBL abbreviates.)

Frans was worried about "the effect of the EF on his business initially" (24:30), "If they [Microsoft] pull this off, I'm really in trouble." However, he concluded that EF "is a persistence solution, not an entity solution" (38:17) and decided "there's room for more than one [O/RM] tool" (39:10).

5/30/2007: An Entity SQL Primer

Microsoft promised an eSQL: An Entity SQL Language, ADO.NET Technical Preview document in the The ADO.NET Entity Framework Overview (June 2006) whitepapers, which appeared briefly in May 2006 and then vanished for about three weeks. As far as I've been able to determine, the ADO.NET team never published this document. 

There is an Entity SQL Quick Reference Guide (June 2006, a Word DOC in your C:\Program Files\Microsoft SDKs\ADO.NET vNext CTP\Docs folder after installing the Orcas March 2007 CTP), but it's not comprehensive and lacks syntax examples.

Mark Shields and Fabio Valbuena posted in the ADO.NET Team blog a much more detailed tutorial for Entity SQL (eSQL) on May 30, 2007. The post includes syntax examples using the Northwind sample database (what else?) and has the following sections

  • Types
  • Expressions
  • Query Expressions
  • SELECT VALUE and SELECT ROW
  • OFTYPE, ISOF, and TREAT
  • Paging
  • Relationship Navigation
  • Multi(set) Operations

If you're attempting to query the EDM with anything more complex than SELECT VALUE, you need to create a reference copy of this post.

5/29/2007: First Entity Framework CTP Scheduled for June

I reported that ADO.NET's Zlatko Michailov said on May 21, 2007, "The CTP is scheduled for June" in this ADO.NET Orcas forum thread in my Defining the Direction of LINQ to Entities/EDM post. However, you might not have seen this note if you didn't make it to the end of my list.

Mike Pizzo confirms in his comment that:

The first CTP of the Entity Framework outside of Orcas will be in June, and we will have CTPs/betas aligned with each of the Orcas Betas & RTM.

Good news. Let's hope the CTP has the new graphical EDM Designer.

Friday, June 01, 2007

Google Gears Piques New Interest in Data Synchronization

Google's announcement of their new Gears browser extension API for enabling offline capabilities in Web apps with these services:

  • LocalServer to cache and serve application resources locally.
  • Database (SQLite) to serve as a searchable local data store with online synchronization capability
  • WorkerPool to enable clients to run resource-intensive operations on a new thread

Google's Choosing an Offline Application Architecture page shows how the client application's UI can switch between the Web server and local database cache as its data source. Running SQLite or any other database in the browser requires write access to the client's file system. Synchronization can be manual, as in the Gears-enabled Google Reader (a button toggles between online and offline mode), or background, which can take advantage of the WorkerPool.

Update 6/2/2007: Tim Anderson's Why Google Gears? Thoughts from Google Developer Day provides an independent overview of Google Gears and notes the importance of synchronization. Tim also mentions full-text search in his SQLite will be everywhere post. According to Michael Cleverly's October 11, 2006 blog entry for D. Richard Hipp's keynote at the 13th Annual Tcl/Tk Conference:

As of SQLite 3.3.8 (released Monday!) full text search support in SQLite. Richard's authorized to announce help from engineers at Google. Later question elicited that roughly half of the FTS code was written by Richard and Dan, the other half by four engineers from Google. He isn't able to/can't comment on their motivations/plans/internal usage. [Minor edits.]

[The blog also notes that Microsoft uses SQLite in the Xbox.]

Google's Database API page states, "Google Gears includes SQLite's full-text search extension fts2."

Scott Hanselman says in his Google Gears - Maybe all Rich Internet Applications needed was Local Storage and an Offline Mode post:

Stunning move by Google today in the Rich Internet Application space. While most of us (myself included) are off debating Flash vs. Silverlight vs. Apollo vs. Whatever, Google introduces Google Gears ... a technology all of the above (or none of the above) can utilize ...

This is a huge move and is quite brilliant. In one seemingly innocuous move (and one tiny 700k (yes, 700K) download) Google is well positioned to get Google Docs, including Writely, Spreadsheet and Presentation, along with who knows what else, enabled for offline use. And the whole thing is Open Sourced via the New BSD License.

Dare Obasanjo quotes Robert Scoble's Google brings developers offline with “Gears”; new offline Reader post, and asks "[W]hat took them so long?", and closes with "Welcome to the future."

Robert says:

Gears supports using Adobe’s Apollo and Flash and should support other technologies including Microsoft’s Silverlight. [Emphasis added.]

But eWeek's Darryl K. Taft clarifies Gears' support for Silverlight in today's "Google Gears Aims to Bolster Adobe Apollo, Others" article:

Meanwhile, Google Gears will work with Microsoft's Silverlight cross-platform, cross-browser tool for building RIAs. Gears hopes to complement Microsoft's Silverlight and other technologies by offering an offline infrastructure that developers can incorporate into any Web application—even those that use plug-ins from other companies, a Google spokesperson said. [Emphasis added.]

However, Microsoft has its own local database cache: SQL Server Compact Edition (SSCE) and Synchronization Services (Sync Services). Orcas Beta 1 includes Sync Services Beta 1 and an early version of the graphical Sync Designer for SSCE 3.5. Sync Services is limited to synchronization between SSCE 3.1 or 3.5 on the client side and SQL Server 200x behind the Web server. Unfortunately, SSCE v3.x doesn't have full-text search capability.

Presumably, it would be possible to install the SSCE bits (1.8 MB) in conjunction with the Silverlight 1.1 runtime (4.2 MB) but you'd also need to install at least the Sync Services client pieces. The entire gears.dll is 852 kB for IE and 700 kB for Firefox. (The SQLite library itself varies in size from 224 to 513 kB, depending on options). However, a more appropriate comparison might include the 2.3 MB for the Flash player and its helper file. Note that the Gears library doesn't include a synchronization service. Developers would need to write their own service, which is no small chore (especially in JavaScript.)

Update 6/6/2007: Dare analyzes Google Gears in his June 5, 2007 Google Gears: Replacing One Problem with Another post and concludes that the missing synchronization component might be a showstopper:

It seems that without providing data synchronization out of the box, Google Gears leaves the most difficult and cumbersome aspect of building a disconnected Web app up to application developers. This may be OK for Google developers using Google Gears since the average Google coder is a Ph.D but the platform isn't terribly useful to Web application developers who want to use it for anything besides a super-sized HTTP cookie.

Collectively, the comments to Dare's post point out that general-purpose synchronization systems aren't easy to get right and that users of the Gears toolkit will need to write their own sync services. One commenter (Sam Sethi) points out that the Remember the Milk online to-do list has added Google Gears synchronization.

Update 6/7/2006: eWeek's Microsoft Watch blogger, Joe Wilcox, posted his Can Microsoft Be the Wrench in Google Gears? article on June 6, 2007. Joe quotes the same paragraph from Date's entry (above), and observes:

Quite possibly, synchronization is the killer app that will determine whether desktop software maintains its relevance or the Web becomes the more popular platform. ... The natural place for synchronization services is as part of the operating system.

Microsoft DevSource's Jeff Cogswell responded to Joe's post in his June 7, 2007 Synchronization: The future of the web? item:

Unfortunately, I think Joe's blog is missing something here, and I'm speaking as a developer. Synchronizing data is never a trivial nor generic task, because how it works and what it does depends on the particular application, and often requires substantial user input, and is heavily tied to file formats and how the data is organized inside the file.

ZDNet Blogger David Berlind posted an audio interview about Google Gears that he conducted on May 30, 2007 with Google director of engineering Linus Upson. Berlind quotes Adobe’s vice president of product management Michele Turner:

[W]e were developing identical technology to facilitate the offline component of the Apollo runtime. ... For example, they’re [Google] using SQLite and we were already incorporating SQLite into Apollo. So, now we’re aligning our efforts with Google on things like the synchronous and asynchronous calls that must be made to the SQLite database in order to enable the offline capability.

Google Gears piqued more interest in data synchronization than I expected.

Recent Microsoft Synchronization Services Updates

My "Update Local Data Caches with Sync Services" article in the May 2007 issue of Visual Studio Magazine carries this deck:

"The Microsoft Synchronization Services 1.0 API for SQL Server 2005 Compact Edition and the new Sync Designer in the Orcas March 2007 CTP team up to generate a local data cache that synchronizes incrementally and bidirectional with SQL Server [Express]."

Sync services and the Sync Designer is the technology behind Occasionally Connected Systems, which--together with the Entity Framework--comprise the Dynamic Development "Pillar of Katmai."

My earlier "Lighten Up Your Local Databases" in the March 2007 Visual Studio Magazine issue covers SQL Server 2005 Compact Edition v3.1 , which is the first version licensed for use in conventional PCs, and v3.5, which is included in Visual Studio codename "Orcas." Microsoft initially called V3.5 "SQL Server Everywhere Edition." V3.5 adds important features, such as timestamp fields to aid synchronization and simplify concurrency conflict detection. SQL Server Mobile Edition v3.0 and earlier were licensed for use by devices and Tablet PCs only.

Microsoft's Rafik Robeal released Demo VII: Tombstone Cleanup and Detecting Stale Offline Clients for the Sync Services runtime. Tombstone cleanup detects and prevents stale clients from synchronizing and tells them to reinitialize their local data cache. A stale offline client is a computer that hasn't synchronized in the last n days, so the client's sync request is rejected.

Rafik has updated the preceding six demos to VS Orcas Beta 1 in his Sync Services Demos Refresh post:

Update 6/6/2007: Rafik just added a Sync Events for Conflict Handling, Progress Reporting, Business Logic … post that describes Sync Services new set of events. Some of the events are implemented in Beta 1, but you'll have to wait for Beta 2 for the others. See my Synchronization Services Runtime Beta 1 for ADO.NET 2.0 Is Available and A Sync Services Bidirectional Test Harness posts for issues with the Beta 1 release.

IBM and Oracle to Support the ADO.NET Entity Framework

Microsoft's two three major relational database management system (RDBMS) competitors—IBM, Oracle, and MySQL—have announced plans to support the ADO.NET Entity Framework.

Update 6/15/2007: David Sceppa reports in his TechEd: Provider Writers Talk About the Entity Framework post that IBM "demonstrated an early build of their provider working with the 101 LINQ to Entities samples." MySQL missed the session "due to scheduling problems but they are still very much involved."

Update 6/16/2007: Mike Pizzo expands on David Sceppa's report with brief details of Tech*Ed's DAT04-TLC ADO.NET Entity Framework: Provider Model and Integration with Third-Party Databases presentations by DataDirect Technologies, Sybase, Oracle, and VistaDB in his Database Vendors Discuss the Entity Framework and LINQ at TechEd post of 6/15/2007 in the ADO.NET blog. As far as I can determine, this is the first mention of Sybase as participant in the EntityClient provider program. Mike also confirmed IBM's intention to add EntityClient and LINQ support to their Informix ADO.NET Data Provider.

IBM

From my Future LINQ to SQL Support for Multiple Databases? post: According to the April 2007 "Looking to LINQ" story in Redmond Developer News:

Microsoft is working with other database vendors to build interoperability into their repositories as well. Oracle Corp. officials would only say they're monitoring LINQ's progress, but IBM Corp. says it plans to support LINQ in both its DB2 database and the Informix IDS platform.

Curt Cotner, an IBM Fellow and CTO for database servers, says LINQ could very well be critical in eliminating the fragmentation that exists today among programmers and database developers. Still, Cotner expects LINQ to have its share of both ardent supporters and critical detractors. "It's going to be popular for a significant segment of customers, but there will be another segment that will see it as not down the path they're trying to follow," he says. ...

But Cotner doesn't see [the Java Persistence API,] JPA and LINQ as competing specifications per se. "It addresses a different segment of the population," he says. And frankly, he admits from a developer standpoint, JPA can't touch LINQ in terms of its ability to build native queries into code from the language and development environment.

Supporting LINQ in a third-party RDBMS implies writing a custom EntityClient provider, as mentioned by Elisa Johnson, Program Manager, Microsoft Data Programmability in an April 23, 2007 comment in the ADO.NET Team's ADO.NET Entity Framework - Orcas Beta 1 post:

We are working closely with many DB vendors, including IBM, to help them update their ADO.NET providers to support the Entity Framework. Unfortunately, I do not have any information as to when they may release a new provider.

David Sceppa, an ADO.NET program manager and author of Programming Microsoft ADO.NET 2.0 Core Reference, refers to Tech*Ed's "ADO.NET Entity Framework: Provider Model and Integration with Third-Party Databases" chalktalk in this May 25, 2007 Entity Framework Provider Talk at TechEd post:

I’m pleased to say that DataDirect, IBM and others will be in attendance to talk about the work they’re doing to add support for the Entity Framework to their ADO.NET providers.

  • DataDirect will discuss heterogeneous data sources in an Entity Framework environment, the importance of best of class ADO.NET providers as an essential component for the Entity Framework and present a use case on a how to ensure a successful Entity Framework development and deployment cycle.

  • IBM will talk about their investments to support the Entity Framework for their Data Servers and to demonstrate an early build of their provider working with the Entity Framework.

ORACLE

Christian Shay, Product Manager in the .NET and Windows group at Oracle left this comment to the Future LINQ to SQL Support for Multiple Databases? post on May 31, 2007:

I think Oracle is keeping their level of support secret. But, a clue has just been revealed and apparently, more will be known at TechEd. Oracle is co-presenting a talk called "ADO.NET Entity Framework: Provider Model and Integration with Third-Party Databases" Check it out: http://cshay.blogspot.com/2007_05_01_archive.html.

So it's now clear that Oracle is doing more than "monitoring LINQ's progress."

MySQL

Update 6/2/2007: According to Mike Pizzo, the ADO.NET architect who's leading the chalk talk:

We have had two “ProviderFests” where vendors have come to Redmond for a week at a time to extend and test their providers with the latest Entity Framework bits and give us feedback. SQLite has already posted a version of their provider that works with the Entity Framework beta, and IBM, DataDirect, Oracle and MySQL will all join me for a chalk talk at TechEd on Friday to discuss their experiences extending their providers for the Entity Framework.

Hopefully, Sybase and the PostgreSQL folks will join the EF bandwagon before long.

 

Embedded RDBMSes

David Sceppa added the ADO.NET Orcas: Sample Provider post to the ADO.NET Team blog on March 16, 2007. The entry begins:

Last month, the ADO.NET team hosted a number of ADO.NET Data Provider writers on campus to present information on how to enhance an existing provider to support the Entity Framework features in the upcoming Orcas release.

David's ADO.NET vNext Provider Writer Event Summary post of August 25, 2006, mentions that representatives from DataDirect, IBM, MySQL, SQLite, and Sybase attended the event.

SQLite

PHX Software's Robert Simpson announced on September 6, 2006 a preview release of an "ADO.NET vNext" provider for SQLite and wrote about the conference in this ADO.NET Entity Framework blog. (Google uses SQLite as the embedded database for Google Gears.)

VistaDB

VistaDB Software, Inc. announced the intent to support LINQ in a future version of VistaDB. VistaDB 3 is an embedded SQL database for .NET, the .NET Compact Framework, and Mono that supports datatypes compatible with SQL Server 2005 (except xml) and uses T-SQL syntax. Jason Short wrote in an April 7, 2007 "LINQ and VistaDB" blog post:

I feel quite strongly that LINQ support in the future will be a vital feature of VistaDB. Since we are already a fully managed database for Dot Net, the ability to make fully type safe queries will definitely set us apart from other database systems. And the fact that we will not have to drop to SQL code to perform that queries will mean a faster running database as well (and that is what you really wanted to hear, right?). ...

LINQ support is on the list for research right now. When will [w]e release it? I don’t know. I would really like to hear from you about your plans to support LINQ. I think it is quite obvious that LINQ is going to change the way a lot of applications are written to query their database.

SQL Server Compact Edition

SSCE has an EntityClient provider, but it doesn't appear to work in Orcas Beta 1.

(The preceding content, except the new Oracle and Tech*Ed session information, is repurposed from my Future LINQ to SQL Support for Multiple Databases? post.)