Thursday, April 17, 2008

LINQ and Entity Framework Posts for 4/14/2008+

Note: This post is updated daily or more frequently, depending on the availability of new posts.

Updated: 4/20/2008

Latency and Service Level Agreement Sections Added to Comparison of Online Databases

Data latency and eventual consistency are known problem issues Amazon SimpleDB, might be an issue with Google App Engine's Bigtable-based Datastore, and probably won't be a problem with SQL Server Data Services. None of the three beta "datastores in the cloud" services offer a Service Level Agreement (SLA) at present, but Microsoft claims that data backups are stored in each cluster, and geo-redundant data copies provide disaster recovery.

Read more about these features in Comparing Google App Engine, Amazon SimpleDB and Microsoft SQL Server Data Services.

Added: 4/19/2008

David Hayden Walks Through the New ASP.NET Dynamic Data Wizard

Scott Guthrie's "Visual Studio Dynamic Data Project Wizard" topic from his ASP.NET MVC Source Refresh Preview post of April 16, 2008 gives a brief introduction of the enhanced Dynamic Data Wizard that generates the LINQ to SQL partial classes and DataContext code for highly customized template pages that include selectable INSERT/UPDATE/DELETE UIs.

Dave's ASP.NET Dynamic Data Wizard - Generating LINQ To SQL Data Model and Custom Pages post of April 19, 2008 goes Scott one better with a fully illustrated and highly detailed Wizard walkthrough.

Added: 4/19/2008

Aral Balkan's GAE SWF Project Demonstrates Flash and Flex on Google App Engine

Aral's The GAE SWF Project is a simple Google App Engine application that uses a Flash form to save individual user profiles in GAE's Datastore. The form uses the Users API, DataStore API, and Mail API to log the user in with his or her Google account, create a new login, and save the data in the Datastore, and log the user in automatically on return. As a plus, Aral includes code from his Make Flash obey text size changes post.

The demo also proves that it is possible to create simple, utilitarian Web components with Flash and Flex.

Update 4/20/2008: Aral notes in his The GAE SWF Project 1.21 post that he updated The GAE SWF Project to version 1.21 on April 20, 2008.

Added: 4/19/2008

Updated Version of Visual LINQ (VLINQ) Query Builder Project Available with Source Code

Microsoft France's add-in for Visual Studio helps you to visually build LINQ to SQL queries with a process similar to the Access query builder. This new version, posted to CodePlex on April 17, 2008 and updated April 18, includes a fix for an installer bug and delivers full source code.

Added: 4/19/2008

Rick Strahl Suggests Using LINQPad as a Code Snippet Execution Engine

Rick says in his LINQPad as a Code Snippet Execution Engine post of April 17, 2008:

LINQPad does a great job at LINQ execution and visualization, but it has a lot more uses than just a LINQ query tool. It's basically a snippet editor that allows you to save snippets and more importantly, execute just about any code that you can write as an expression or single function block . You can execute both Expressions which is a single command that returns a result or a single block of commands or a Statement which is a block of commands in a single execution block (essentially what would amount to a method body).

It's awesome if you just want to very quickly verify how some .NET function or expression  works without having to write a test, console output routine or change your code and run it with the debugger.

Added: 4/17/2008

Ruurd Boeke Wraps Up His n-Tier Entity Framework Implementation

His latest New sample application for disconnected n-tier EntityFramework objects of April 16, 2008 is an MVC client for the April 7, 2008 version the Disconnected N-Tier objects using EntityFramework project, which Ruurd describes as:

[A] sample application that uses a server to retrieve data with EF and a client that is totally unaware of EF. Changes on the client are changetracked and serialized in a pretty xml format. Then, the server attaches to the graph and is able to use a context to save changes.

The MVC client is based on Microsoft patterns & practices' new Prism framework for developing composite Windows Presentation Foundation (WPF) applications. The Prism group describes their framework as:

"Prism" addresses the challenges around building complex enterprise WPF applications. As complexity increases and teams grow, applications become increasingly difficult to maintain. Using "Prism" enables designing a composite application that is composed of many discrete, loosely coupled modules. These modules can be developed, tested and deployed by separate teams.

Source code for Ruurd's project is available from CodePlex.

Added: 4/17/2008

Beth Massi Continues her LINQ to SQL n-Tier Smart Client Project

Beth's LINQ to SQL N-Tier Smart Client - Part 3 Database Transactions of April 16, 2008 aggregates INSERT, UPDATE, and DELETE operations on a previously disconnected DataContext into a single explicit transaction.

Following are links to Parts 1 and 2:

Added: 4/17/2008

Kevin Hoffman Adds Continuous Aggregation (Including VWAP) to CLINQ

Kevin's been working on Continuous LINQ (CLINQ) again, as evidenced by his CLINQ v1.1 - Extending the AggregateViewAdapter to Create Continuous VWAP post of April 16, 2008 and the first two posts below. His latest post describe improvements to v1.1 to include Volume-Weighted Average Prices (VWAP), a means of normalizing historical stock prices by taking into account the number of shares traded at a given price.

Source code is available on CodePlex.

CLINQ is similar in concept to LINQ to Streams (SLINQ or Streaming LINQ) by Oren Novotny, which is described in Third-Party LINQ Providers of March 27, 2007, last updated 8/7/2007. Looks like it's time to do another third-party LINQ provider update.

Added: 4/17/2008

Lack of SSL Support Nullifies Google App Engine as a Web Data Store

According to Google's Marzia in an April 10, 2008 message to the Google App Engine (GAE) group, "Please keep in mind when designing any system that Google App Engine does not currently provide SSL support for your domain." There are indications in another GAE group thread that the premium (paid) version will support SSL.

Failure to support SSL is a major obstacle to GAE's adoption for commercial applications. Google must confirm that the premium version will support SSL before professional developers can  justify devoting resources to this service.

For more details, see the Comparing Google App Engine, Amazon SimpleDB and Microsoft SQL Server Data Services post of April 9, 2008 (updated April 15, 2008).

Thanks to Filip Verhaeghe for the heads up in an April 15, 2008 comment to the preceding post on this issue.

Pablo Castro: ADO.NET and SQL Server Data Services to Converge

Pablo's Astoria Online Service --> SQL Server Data Services post of April 14, 2008 outlines plans to harmonize standards for on-premise ADO.NET Data Services and Microsoft-hosted SQL Server Data Services.

As part of our unified Data Services vision, we will provide a solution that enables seamless integration between on-promise deployments (software) and cloud based deployments (services). 

We’re working on aligning aspects of SSDS and Astoria and this alignment will come over a series of updates to both Astoria and SSDS. For example, we will likely add AtomPub and JSON support to SSDS to match the results encoding of Astoria and are already working on extensions to EDM to incorporate the open content model of SSDS.

We’ll be working to extend Astoria as needed to ensure it provides a great development experience over the SSDS service. It’s also worth noting how the Microsoft Sync Framework can be used to tie multiple deployments together – Nigel covers this in his talk. Stay tuned for more details.

Extending the EDM to cover SSDS's free-form "open content model," including "flexible entities" doesn't appear to me to be a piece of cake.

New LINQ to CSV Library on CodeProject

Matt Perdeck claims the following features for his LINQ to CSV library posted April 10, 2008:

  • Follows the most common rules for CSV files. Correctly handles data fields that contain commas and line breaks.
  • In addition to comma, most delimiting characters can be used, including tab for tab delimited fields.
  • Can be used with an IEnumarable of an anonymous class - which is often returned by a LINQ query.
  • Supports deferred reading.
  • Supports processing files with international date and number formats.
  • Supports different character encodings if you need them.
  • Recognizes a wide variety of date and number formats when reading files.
  • Provides fine control of date and number formats when writing files.
  • Robust error handling, allowing you to quickly find and fix problems in large input files.

Looks like a worthwile addition to third-party LINQ implementations to me. The date-handling features are a must-have for production use.

Thanks to David Hayden for the heads up.

Rick Strahl Revisits Options for LINQ to SQL Dynamic Queries

Rick says in his Dynamic Queries and LINQ Expressions post of April 14, 2008:

I'm revisiting some code in my LINQ to SQL business objects layer that I've written about before. The problem I ran into and described was that I had a class with generic business object behavior that needs to look up values based on a database field that wouldn't be known until runtime.

He then goes on to examine these options:

  • Skip LINQ and use SQL strings with ExecuteQuery<T>
  • Dynamic Query
  • Use Lambdas instead of fixed Parameters
  • Storing and Reusing a Lambda Expression

As usual, it's a good read.

Matthew Hunter Releases Update to LINQ to SQL Entity Base

Matt says in New Version of LINQ to SQL Entity Base Class (Beta 3.0) of April 14, 2008:

In the example that comes with the LINQ to Entity Base, [I]'ve used the data contract serializer (which is what WCF uses to serialize/deserialize objects) to demonstrate this. I've also improved the example so you can scroll through the results by converting it to a simple windows form.

Matt's earlier posts about n-tier deployment and disconnected updates with LINQ to SQL are here.

Terry Aney Implements Batch Updating and Deletion for LINQ to SQL

Terry's Batch Updates and Deletes with LINQ to SQL post of April 14, 2008 is a further refinement of Jeffry Zhao's approach to the batch deletion topic in his LINQ to SQL Extension: Batch Deletion with Lambda Expression post of March 6, 2008.

Source code for Terry's project is available here.

Justin Etheredge Explores LINQ's Let Keyword

In The Linq "let" keyword of April 14, 2008, Justin covers the use of the let keyword in LINQ expression syntax to make queries more readable.

Beth Massi Continues Her LINQ to SQL n-Tier Smart Client Series

LINQ to SQL N-Tier Smart Client - Part 2 Building the Client (April 14, 2008) shows you how to build the "very simple Windows client form that works with our middle-tier" that her LINQ to SQL N-Tier Smart Client - Part 1 Building the Middle-Tier post of April 12, 2008 describes.

Eugenio Pace Shows You How to Search Across SSDS Containers

SQL Server Data Services (SSDS) ordinarily limits the scope of queries to a container, which is its basic unit of data storage. However, if you're willing to implement Eugenio's CrossTenantSearch helper class to run concurrent searches, you can overcome this limitation.

Eugenio's LitwareHR on SSDS - Part V - Searching across Containers post of April 13, 2008 contains a diagram

AppDrop Ports Google App Engine SDK to Amazon EC2

Andy Baio, the developer of (now a Yahoo! service), describes Chris Anderson's AppDrop application:

How does it work? Behind the scenes, AppDrop is simply a remote installation of the App Engine SDK, with the user authentication and identification modified to use a local silo instead of Google Accounts. As a result, any application that works with the App Engine SDK should work flawlessly on AppDrop. For example, here's Anderson's Fug This application running on Google App Engine and the identical code running on EC2 at AppDrop.

Of course, this simple portability comes at the cost of scalability. The App Engine SDK doesn't use BigTable for its datastore, instead relying on a simple flat file on a single server. This means issues with performance and no scalabity to speak of, but for apps with limited resource needs, something as simple as AppDrop would work fine.

For additional AppDrop details and links, see Andy's Exclusive: Google App Engine ported to Amazon's EC2 post of April 14, 2008.

Microsoft's Red Dog Project Promises [Windows] Applications in the Cloud

LiveSide - News blog's Red Dog: Ray Ozzie's answer to the Google App Engine? post of April 9, 2008 claims that the "Microsoft Utility Computing Platform, code named Red Dog, sounds very much like a platform for building a Google App Engine type service (except maybe quite a bit better)" and also might be a competitor to Amazon's EC2.

A job posting by the Cloud Infrastructure Group gave this Red Dog feature list [paraphrased by LiveSide]:

  • An "efficient, virtualized" environment
  • A "fully automated service management system" (like the Google App Engine, you won't have to worry about managing the system)
  • On "highly scalable" storage services (you only use the storage you need)
  • The service will "scale to millions of machines" across Microsoft's data centers (geo-located, easy to maintain data centers, remember?)  
  • "[W]ill lead the marketplace as the best platform for rapid development, deployment, and maintenance of internet services and applications"
  • SDK and tools will be included for external and internal customers
  • V1 for external customers in the coming year

Mary Jo Foley adds some code-name spice to the topic in her Red Dog: Yet another unannounced Microsoft cloud service article of April 9, 2008.

EMC also has a Cloud Infrastructure and Services Division run by former Microsoft exec Paul Maritz.

Forthcoming Persistent Storage for EC2 Can Run Relational Databases

Developers will have another "database in the cloud" option when Amazon Web Services (AWS) releases its newly-announced persistent storage feature for their Elastic Computing Cloud (EC2) feature. According to Jeff Barr in the Amazon Web Services blog's Storage Space, The Final Frontier post of April 13, 2008:

[O]ur forthcoming persistent storage feature will give you the ability to create reliable, persistent storage volumes for use with EC2. Once created, these volumes will be part of your account and will have a lifetime independent of any particular EC2 instance.

These volumes can be thought of as raw, unformatted disk drives which can be formatted and then used as desired (or even used as raw storage if you'd like). Volumes can range in size from 1 GB on up to 1 TB; you can create and attach several of them to each EC2 instance. They are designed for low latency, high throughput access from Amazon EC2. Needless to say, you can use these volumes to host a relational database. [Emphasis added.]

There's more detail in Persistent Storage for Amazon EC2 post in the AWS Developer Connection blog, and RightScale's Amazon takes EC2 to the next level with persistent storage volumes, both of the same date.

Any chance that the Google App Engine announcement had something to do with Amazon's announcement timing?