Showing posts with label Ajax. Show all posts
Showing posts with label Ajax. Show all posts

Wednesday, October 29, 2008

LINQ and Entity Framework Posts for 10/27/2008+

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

• Updated 10/29/2008 8:00 AM PDT: Additions

Entity Framework and Entity Data Model (EF/EDM)

Paul Gielens liveblogs Tim Mallalieu’s The Future of the Entity Framework (TL20) PDC 2008 session on 10/28/2008. The Entity Framework Futures video should appear shortly on Channel9.

Danny Simmons used Damien Guard’s T4 templates for LINQ to SQL as inspiration for his Using T4 Templates to generate EF classes post of 10/28/2008. At this point, Danny’s template is an “early draft” and is missing a VB version and some other features. However, it’s a step in the right direction.

Faisal Mohamood’s Foreign Keys in the Conceptual and Object Models post of 10/27/2008 compares the treatment of foreign key values in LINQ to SQL (visible) and EF/EDM (not visible), as well as the trade-offs of both approaches. The topic is controversial, but I’m in favor of making FK values optional in EF/EDM, just as adding the “Set” suffix to entity sets should have been optional (and presumably will be in v2.)  

LINQ to SQL

• Sidar Ok’s Lazy Loading with Linq to SQL POCO post of 10/28/2008 shows you how to implement lazy loading for his earlier Achieving POCO s in Linq to SQL project with the LinFu Dynamic Proxy.

Sebastien Lachance suggests use of the DataContext’s DeleteDatabase() and CreateDatabase() methods to assure that test databases are in the proper state in his Unit Testing, LinqToSql and CreateDatabase post of 10/27/2008.

Ilan Assayag provides links to methods of providing Configurable connection string with Linq to SQL in his 10/27/2008 post.

LINQ to Objects, LINQ to XML, et al.

Charlie Calvert begins coverage of C# 4.0 in his LINQ Farm: Covariance and Contravariance in C# 4.0 post of 10/28/2008.

ADO.NET Data Services (Astoria)

Pablo Castro’s Now you know...it's Windows Azure post of 10/28/2008 describes Azure’s table service for structured storage of entity/attribute/value (EAV) data in row/column (property) containers (partitions). Table service features an Astoria-compatible RESTful external interface, as well as internal ADO.NET connectivity. Azure includes .NET 3.5 SP1 so you can use the current Astoria client to interact with table services.

Pablo and Niranjan Nilakantan will present Windows Azure: Modeling Data for Efficient Access at Scale (ES07 | Wed 10/29 | 1:15 PM-2:30 PM | 403AB):

Learn how to use the highly scalable, available and durable table storage service. This session presents a deep dive with demos into the programming APIs and data models for structured storage.

Brad Calder presented the Windows Azure Storage: Essential Cloud Services (ES04 01:14:50) PDC session on 10/28/2008:

Modern services need available, scalable and durable data in many forms, including both structured and unstructured data. This session presents blob, table and queue storage services and the APIs for manipulating and querying data.

Brad Calder is Director/Architect of Cloud Storage, which is the essential scalable, available and durable storage for Microsoft’s Cloud Platform.

Brad’s session describes Azure’s three basic data abstractions: Blobs, Tables, and Queues. Table-oriented content begins at 00:21:29. ADO.NET Data Services access with LINQ or REST starts at 00:30:00. Queue content begins at 00:40:00.

Matthieu Mezil’s ADO.NET Data Services Hooking POC V4 post of 10/28/2008 improves on Astoria’s rights management approach by moving it from the service to the business logic layer’s entity class. His downloadable proof of concept code is available from CodePlex.

Joe Gregorio, Google’s main man for the Atom Pub Protocol, offers a 15-minute An Introduction to REST video he describes as:

Google Data APIs are based on the Atom Publishing Protocol and both Google Data APIs and AtomPub get many advantages from being RESTful protocols. Often the meaning of REST and the advantages of RESTfulness go unexplained so I put together this short 15 minute video that explains REST and some of the advantages you get with a protocol built in that style.

Steve Maine’s Announcing the WCF REST Starter Kit post of 10/27/2008 describes the REST Starter Kit as follows:

When I talk to customers about the API’s for building REST services we added to WCF in .NET 3.5, most people “get it” at some abstract level but come away really wishing for deeper guidance and samples on how to use the platform to address common problems. To answer some of those questions, we’ve taken about 20 of the top customer questions and put them into the REST Starter Kit download as SDK samples so you can look at code and see how the API’s are used in practice.

ASP.NET Dynamic Data (DD)

Scott Hunter will present ASP.NET Dynamic Data [for MVC] (PC30 | Wed 10/29 | 3:00 PM-4:15 PM | 411):

The next version of ASP.NET MVC contains a new scaffolding feature based on Dynamic Data that provides a rich framework for creating data driven web sites. Learn how to quickly build a Dynamic Data web site using features like model level validation, field and entity templates, and scaffolding.

Mike Ormond’s Lots of new ASP.NET bits post of 10/28/2008 notes that the ASP.NET CodePlex site has the following new items:

    • ASP.NET AJAX 4.0 Preview 3
    • ASP.NET Dynamic Data 4.0 Preview 1
    • ASP.NET MVC Beta Source Code Release

SQL [Server] Data Services (S[S]DS) and Cloud Computing

Jim Nakashima covers the simples way to get a Blob Storage service up and running in his Windows Azure Walkthrough: Simple Blob Storage Sample post of 10/29/2008.

OakLeaf’s Cloud Computing at PDC and Elsewhere: Day 2 (10/28) is the second “daily compendium of PDC keynotes and sessions about Cloud Computing, SQL [Server] Data Services, and related topics.”

• Jim Nakashima’s ASP.Net MVC Projects running on Windows Azure post of 10/28/2008 describes how to tweak an ASP.NET MVC project to run on WinAz and includes a sample application.MSDN’s SQL Data Services Developer Center has updated documentation for SDS (updated from SSDS).

Anthony Carrabino provides an overview of what’s new in SDS in his New version of SQL Data Services part of “Azure” CTP post of 10/28/2008.

Jim Nakashima’s Deploying a Service on Windows Azure post of 10/28/2008 is a detailed, illustrated primer that explains how to deploy as a .NET Service the simple ASP.NET app he demonstrated in his Quick Lap around the Windows Azure Tools for Microsoft Visual Studio article.

Ryan Dunn explains What's new in SQL Data Services for Developers in this Channel9 screencast wherein

Ryan visits Jason Hunter and Jeff Currier, a couple of the lead developers on the SQL Data Services team (formerly called SQL Server Data Services) to find out what the new PDC CTP build of the SDS service brings for developers.

The SSDS Getting Started Forum’s New Features thread discusses the lack of cross-container joins in the new SDS version.

Soumitra Sengupta Microsoft Announces Windows Azure and Azure Services Platform provides a brief synopsis of previous and forthcoming PDC 2008 sessions about SQL Data Services.

Oakleaf’s SQL Data Services (SDS) Update from the S[S]DS Team of 10/27/2008 is a copy of a Soumitra Sengupta’s e-mail sent to all registered SSDS users about the upgrade to SDS coming in “early” and “mid-November.”

OakLeaf’s Cloud Computing at PDC and Elsewhere: Day 1 (10/27) is the first of “a daily compendium of PDC keynotes and sessions about Cloud Computing, SQL Server Data Services, and related topics.”

SQL Server Compact (SSCE) 3.5 and Sync Services

Lev Novik’s Microsoft Sync Framework Advances in v2 PDC 2008 presentation of 10/28/2008 “shows you how the next version of the Microsoft Sync Framework makes it easier to synchronize distributed copies of data across desktops, devices, services, or anywhere else they may be stored.”

Liam Cavanaugh’s Annoucing Sync Framework v2 CTP1 post of 10/28/2008 describes the first glimpse of Sync Services v2, which adds the following new features:

    • Simple Providers
    • Change Unit Filtering
    • Filter negotiation

Liam Cavanaugh explains sync-related SQL Services from the SQL Services Labs incubator in his Introducing SQL Services Labs post of 10/27/2008.

Miscellaneous (WPF, WCF, MVC, Silverlight, etc.)

• Jim Nakashima’s ASP.Net MVC Projects running on Windows Azure post of 10/28/2008 describes how to tweak an ASP.NET MVC project to run on WinAz and includes a sample application. (Repeated from SDS and Cloud Computing.)

Rob Conery is finally getting closer to release of his venerable MVC sample project, as noted in his MVC Storefront Preview 1 Available post of 10/28/2008.

Mike Ormond’s Lots of new ASP.NET bits post of 10/28/2008 notes that the ASP.NET CodePlex site has the following new items:

    • ASP.NET AJAX 4.0 Preview 3
    • ASP.NET Dynamic Data 4.0 Preview 1
    • ASP.NET MVC Beta Source Code Release

(Repeated from the Dynamic Data topic.)

John Papa waxes enthusiastic in his Silverlight 2 - What a Ride! post of 10/27/2008 about Silverlight 2 adoption for O’Reilly’s InsideRIA blog. But the Flash proponents claim Silverlight 2 hasn’t achieved significant usage. I agree with John; until Silverlight 1.0 reared its head, Adobe and Macromedia were resting on their laurels. Flash (and Flex) need competition.

Tim Heuer’s Silverlight Toolkit Released – More controls! post of 10/28/2008 describes the new Silverlight Toolkit that RTW’d on the same date.

Shawn Wildermuth’s

Mike Snow explains that there is now a released version of the Silverlight Tools for Visual Studio 2008 SP1 in Silverlight Tools RTW Released! of 10/28/2008.

Rob Conery’s SubSonic MVC Addin Updated for Beta 1 post of 10/27/2008 announces an updated version of the MVC Add in for his flagship object/relational modeling tool, SubSonic.

Monday, July 28, 2008

LINQ and Entity Framework Posts for 7/24/2008+

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

Updated SQL Server Data Services (SSDS) Test Harness: Northwind REST and SOAP Uploads

The SSDSNwindEntitiesCS.sln sample project for my “Test-Drive SQL Server Data Services” cover article for the July 2008 issue of Visual Studio Magazine has been updated to SSDS Sprint 3, adds a couple of features, and has a few start-up bugs excised.

New Features:

  • The program attempts to create an authority if you haven’t added one.
  • A splash screen opens during the initial query for ACE container and entity object because the process is very slow with a moderate number of objects.

Updates:

  • The new 'application/x-ssds+xml' MIME type replaces ‘application/xml’.
  • The containerUri = response.Headers[HttpResponseHeader.Location]; instruction which now returns null has been replaced with concatenated constants as the containerUri value. This eliminates a problem when creating new containers with REST operations.

Download: You can download the SSDSNwindEntitiesCS project here (114-KB SSDSNwindEntities.zip file at Skydrive).

My Updated SQL Server Data Services (SSDS) Test Harness: Northwind REST and SOAP Uploads of July 27, 2008 has more details and screen captures.

Added: July 28, 2008

Stephen Forte’s Impedance Mismatch Post Elicits Responses from Domain-Driven Designers

The “Stephen Forte Embraces the Impedance Mismatch” topic of my LINQ and Entity Framework Posts for 7/14/2008+ post quotes Steve’s Impedance Mismatch post of June 27, 2008, which eschewed “object-fist” in favor of “data-first” design.

I assumed that Steve’s post would brew a storm of controversy, especially since he’s a member of the Entity Framework’s new Advisory Council. However, it turned out to be a tempest in a teapot as described in my Stephen Forte’s Impedance Mismatch Post Elicits Responses from Domain-Driven Designers of July 27, 2008.

Bidirectional Serialization of LINQ to SQL Object Graphs with Damien Guard’s T4 Template in VS 2008 SP1

LINQ to SQL developer Damien Guard, who joined the DPG in May 2008, announced the availability of a customizable T4 template to generate LINQ to SQL classes from the *.dbml file in his LINQ to SQL T4 template reloaded post of July 23, 2008.

A couple of minor modifications to the L2ST4.tt template file and addition of a reference to and using directive for the System.Runtime.Serialization namespace enables full-object-graph serialization of LINQ to SQL entities. This brings parity to both VS 2008 OR/M tools in the serialization department.

Read more at Bidirectional Serialization of LINQ to SQL Object Graphs with Damien Guard’s T4 Template in VS 2008 SP1 of July 24, 2008 (updated 7/27/2008) and download the sample C# project.

Mike Taulty Posts Five ADO.NET Data Services Screencasts

Following are titles with links to the five Astoria screencasts that Mike posted on July 25, 2008:

Ryan Dunn Makes IE Display SQL Server Data Services New application/x-ssds+xml MIME Type

Internet Explorer now prompts you to download SQL Server Data Services (SSDS) content that uses the new (post-Sprint 3) application/x-ssds+xml MIME type instead of application/xml.

Ryan’s Rendering POX for SSDS in Internet Explorer post of July 25, 2008 gives you the magic Registry hack to make IE display SSDS’s POX wire format.

Matthieu Mezil Shows You How to Instantiate a New EntityKey

Entity Framework uses EntityKeys to represent unique entities in its cache. EntityKeys are immutable, so Matthieu shows you how to instantiate new ones in his EntityReference change key post of July 25, 2008.

Phani Raju Demonstrates Using the AJAX 4.0 Preview’s DataView Control with ADO.NET Data Services

Phani’s ASP.NET AJAX 4.0 Master-Details View with the DataView and ASP.NET AJAX 4.0 Master-Details View with the DataView , Part 2 posts of July 24 and 25, 2008 use the ASP.NET AJAX 4.0 CodePlex Preview 1’s templating engine and DataView control to build master-details pages.

Phani uses Astoria and its AJAX Client Library for ADO.NET Data Services from CodePlex as the data source.

Jim Wooley: Quickly create an IEnumerable<T> from a DataReader

Jim’s Filling an object from a DataReader with LINQ using DataContext.Translate post of July 25, 2008 shows you how to use the DataContext.Translate<T>() method to create an entity set from a database table without mapping for the DataContext.GetTable() method.

Eric White Analyzes Responses to his “Are Developers Using LINQ?” Post

Eric received many detailed responses to his Are Developers Using LINQ? post of July 23, 2008. In his Are Developers Using LINQ? (Part 2) post of July 25, 2008, he describes these four common LINQ usage scenarios:

  • Using LINQ to Objects and LINQ to XML … .
  • Using query expressions … to access objects and XML.
  • Using LINQ to SQL or LINQ to Entities to access a database.
  • Using LINQ implemented using an IQueryable provider to something other than a SQL database.

and noted that there were only a few negative responses.

Keith J. Farmer points out in a comment to the first post that folks still call LINQ “link,” consider LINQ to SQL to be the only implementation, and believe SQL Server is the only LINQ-enabled data provider.

Ruurd Boeke Joins Microsoft’s Silverlight (not Entity Framework) Team

Ruurd notes in his I’m joining Microsoft!! post of July 25, 2008 that:

I was torn between working on EF (which, I’ve been very involved with lately) and on Silverlight. In the end, Silverlight won, because I strongly believe it to be the strongest contender in the client space.

I’m disappointed that Ruurd didn’t choose to join the Entity Framework team. His six-part Introducing Entity Framework Contrib: Easy IPoco implementation V 0.1 series used Postsharp to “[a]utomatically implement the IPoco interfaces. The project is aimed at helping you build your domain layer in a more persistence ignorant way than is possible at this moment.”

Note: Ruurd’s eight-part Workflow as controller: Introducing <M,V,C> where M: ViewModel, V : WPF, C : WF describes an inventive framework that uses WF in an unconventional role, although he won’t call his tutorial a framework.

Jeff Currier Defends SQL Server Data Services’ Missing PUT/POST Response Bodies

Mike Amundsen’s REST PUT/POST Responses contain ETag, but not body - Oops! thread of July 24, 2008 in the SQL Server Data Services (SSDS) - Getting Started says:

I note that the PUT results in a return that includes an ETag (yay!), but that there is no body returned for this PUT. I think this is a problem. ETags act as a version hash for the document body. Yet this Response has no body!

Jeff’s What happened to SSDS PUT/POST responses? post of July 25 replies:

Prior to this rollout the only mechanism that we had to communicate version information to you was via the entity body of the response (specifically the version element in the body).  However, now that we have true ETag support we now can simply return this value back to caller via the ETag header per the Http spec.

Jeff attributes the reason for the change to future ingress and egress charges; returning the body would increase downloaded bytes.

Beth Massi Posts Four WPF Forms Over Data Video Segments to the Code Gallery

Her WPF Forms over Data: 2 More Videos! post of July 24, 2008 announces #3 and #4 in the following series about data binding in WPF:

  1. How Do I: Create a Simple Data Entry Form in WPF?
  2. How Do I: Display Data in a List in WPF?
  3. How Do I: Create Lookup Combobox in WPF?
  4. How Do I: Hook Up and Display Validation in WPF?

Click the Watch Video link to substitute MediaPlayer for the miniature Silverlight window. VB and C# sample code is downloadable.

Charlie Calvert Continues with Aggregate Operators in his Revived LINQ Farm Series

Charlie’s LINQ Farm: More on the LINQ Aggregate Operators discusses the following LINQ aggregate operators and their overloads:

  • Count and LongCount
  • Min and Max
  • Average
  • Sum
  • Aggregate

Jeremy D. Miller and Ward Bell Discuss Object/Relational Modeling and the Entity Framework in a Two-Part Podcast

The first ALT.NET Object-Relational Mapping podcast with Jeremy D. Miller and Ward Bell covers Object/Relational Mapping (O/RM) tools and when to use them. Topics include:

  • Object-Relational Mapping
  • Object-first vs. Data-first Approaches
  • Evolutionary Database Design
  • Evolutionary Design
  • Code Generation
  • Persistence Ignorance
  • POCO
  • Domain-Driven Design
  • The Vietnam of Computer Science

    The second part “discusses the Vote of No Confidence on Microsoft's Entity Framework and what it means for the Alt.NET and .NET communities.”

    Scott Hanselman Does a Video Deep Dive on LINQ and the Entity Framework

    The actual title of Scott’s Jumpstart Data Driven Web Applications with ASP.NET 3.5 (Part 1 of 2) presentation for Tech*Ed 2008 Developer is “WUX101: Jumpstart Data-Driven Web Applications with ASP.NET 3.5 Dynamic Data Controls (Part 1 of 2).”

    Note: ASP.NET 3.5 Dynamic Data Controls became ASP.NET Dynamic Data after Tech*Ed.

    The deck for the presentation reads:

    Explore the new features in ASP.NET 3.5 that make buliding data driven Web applications a breeze. In this first of a two-part series, learn how to use LINQ to take the pain out of interacting with your relational data and how support for LINQ and its constructs are built into the paradigms you are familiar with in ASP.NET and Microsoft Visual Studio 2008.

    Hopefully the TechEd Online News folks will post Part 2 shortly.

  • Wednesday, May 21, 2008

    LINQ and Entity Framework Posts for 5/19/2008+

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

    Has LINQ to SQL Reached Legacy Status Less than Three Months after Launch?

    LINQ to SQL was the only new data-access implementation to be included in Visual Studio 2008 when it "launched" with SQL Server 2008 and Windows Server 2008 in a series of "Heroes Happen Here" extravaganzas that started on February 27, 2008.

    Judging from my Is the ADO.NET Team Abandoning LINQ to SQL? post of May 21, 2008, Microsoft appears to have ceased further development of LINQ to SQL, based on the lack of new and promised features in the LINQ to SQL SP1 Beta.

    Added: May 21, 2008

    Francois Vanderseypen Offers a Well-Documented Demo of a Web Client Software Factory Project that uses WCF, WF and LINQ to SQL

    His Frameworks and directions (Kyiv presentation, May 2008) post of May 19, 2008 includes a link to download a large-scale Northwind Factory v.2.1 sample project that combines the Web Client Software Factory (WCSF) from CodePlex with LINQ to SQL, Windows Communication Foundation, and Workflow Foundation. The project, which builds a complete multi-tiered, Model-View-Controller (MVC) pattered Web site, includes a 26-page illustrated NorthwindFactory.docx documentation file. NorthwindFactory.docx is the last file in the .zip archive.

    Francois's later Linq to SQL and Workflows post of May 21, 2008, casts doubt on the compatibility of LINQ to SQL data layers with the Workflow Foundation and raises other commonly blogged LINQ to SQL issues. He concludes:

    All this leads somehow to the conclusion that [LINQ to SQL] was really not designed well to fit with the rest of the .Net 3.5 framework. Great idea, but not too well implemented. Let’s hope the final release of the Entity Framework (around [A]ugust with .Net 3.5 SP1) will bring some cures.

    Francois works for Materialise Dental NV in Leuven, Belgum, the developer of "a range of products and services to aid dental specialists in the treatment of their patients," including "the SimPlant range of solutions for Computer Guided Implantology."

    Added: May 21, 2008

    Randolph Cabral Adds Business Entity Classes to His N-Tier LINQ to SQL Project

    In Exploring N-Tier Architecture with LINQ to SQL (Part 4 of n) of May 21, 2008, Randolph "attempt[s] to build out the domain model and use it in our web UI layer to demonstrate how we could interact with the business entities."

    Added: May 21, 2008

    Ben Hall Recommends When and How to Use Stored Procedures vs. User-Defined Functions with LINQ to SQL

    Ben's Linq to SQL Stored procedure vs Functions post of May 21, 2008 provides a detailed analysis of when to substitute user-defined functions (UDFs) for stored procedures in LINQ to SQL data-access scenarios.

    Added: May 21, 2008

    ASP.NET Dynamic Data Website Wizard Gets Major Overhaul in May 20 Update

    Scott Hunter's May 20th Refresh of Dynamic Data is now Available post to the ASP.NET Forums of May 21, 2008 lists 11 significant changes to the Dynamic Data Website Wizard. An important upgrade is replacing details, edit, and insert ListView with FormView controls.

    The Dynamic Data Runtime gets a few bug fixes, as well as UI and validation tweaks.

    You can download the Dynamic Data Runtime and Templates from the MSDN Code gallery.

    Added: May 21, 2008

    Frans Bouma Red-Flags VB's Aggregate LINQ Reserved Word

    According to his VB.NET: Beware of the 'Aggregate' keyword (updated) post of May 21, 2008, executing

    Dim max = Aggregate o in metaData.Order Into m=Max(o.EmployeeID)

    returns all Order entities and executes the Max() aggregate in the client's memory. Surprisingly, Frans reports in his update that the problem doesn't occur with DateTime or String values.

    Added: May 21, 2008

    Dean Whittaker Explains How to Use LINQ to SQL's DataContext Object to Recreate Test Databases

    It's a common practice to mock database operations when using Test-Driven Development (TDD) to improve performance. If you don't mock the database, it's a good practice to recreate it each time your unit tests run to update it.

    Dean Whittaker shows you how to do this in his Using Linq's DataContext to (re)create your database for testing post of May 21, 2008.

    Added: May 21, 2008

    Mike Taulty Extend's Julie Lerman's Analysis of EF Query Execution to LINQ to SQL

    Mike's "When Do Queries Execute" post of May 21, 2008 extends Julie's discovery that stored procedures execute when invoked with ExecuteMethodCall() rather than when the data is needed (see below) to LINQ to SQL queries.

    However, LINQ to SQL queries that invoke table-valued functions do so with CreateMethodCall(), which defers data retrieval until the data is required.

    Added: May 21, 2008

    Aaron Skonnard Describes the .NET 3.5 SP1 DataContractSerializer's New POCO and Cycle Capabilities

    The Windows Communication Foundation (WCF) Data Contract Serializer (DCS) has two important new capbilities:

    1. Capability to serialize complete object graphs with associations that create cyclic references (a.k.a. bidirectional serialization or cycles) for services without a hack.
    2. Capability to serialize plain old CLR objects (POCOs) by removing the requirement to decorate classes with [DataContract] and [DataMember] attributes.

    Aaron Skonnard takes on #1 in his DataContracts and object references post of May 14, 2008 and #2 in his detailed DataContracts without attributes (POCO support) in .NET 3.5 SP1 post of May 13, 2008. I missed Aaron's posts due to the activity surrounding release of .NET 3.5/VS 2008 SP1 Beta.

    Prior to SP1, you could enable serializing graphs with cycles by setting the PreserveObjectReferences argument to true in the DCS's constructor. (Failing to do this raises an exception when the DCS encounters a cycle in the source object.)

    However, you can't enable this option directly when you use the DCS with WCF in a service operation. Instead, you need to subclass DataContractSerializerOperationBehavior and override the CreateSerializer() method with the code described in Sowmy Srinivasan's seminal Preserving Object Reference in WCF post of March 26, 2006.

    My LINQ to SQL and Entity Framework XML Serialization Issues with WCF - Part 1 post of October 9, 2007 and Serializing Cyclic LINQ to SQL References with WCF of October 30, 2007 cover issues with cycles in LINQ to SQL, which also apply to the Entity Data Model.

    The latter post quotes a response to the System.ServiceModel.CommunicationException - The socket connection was aborted... question in the WCF forum by Microsoft's Ed Pinto:

    Please be aware that there is no interop story for the preservation of object references.

    I observed that "[t]he rumor is that Microsoft deliberately made it difficult to set this attribute value to discourage non-interoperable bidirectional serialization scenarios." It will be interesting to see if Microsoft has come up with an interop story to accompany SP1.

    Added: May 21, 2008

    Danny Simmons Updates Entity Framework FAQs

    His New in version 0.5 of the FAQ… post of May 21, 2008 provides links to:

    Added: May 21, 2008

    Igor Ostrovsky Offers Seven Unusual Uses for LINQ to Objects

    Igor is an infrequent poster but his 7 tricks to simplify your programs with LINQ entry of May 18, 2008 contains the following interesting examples:

    • Initialize an array
    • Iterate over multiple arrays in a single loop
    • Generate a random sequence
    • Generate a string
    • Convert sequences or collections
    • Convert a value to a sequence of length 1
    • Iterate over all subsets of a sequence

    Thanks to Scott Guthrie for the heads-up.

    Added: May 21, 2008

    Matthieu Mezil Offers an Illustrated Introduction to Entity Framework with Advanced Topics

    Matthieu's Entity Data Model Mapping: Beyond the Basics article for DataDeveloper.net starts by creating the requisite Northwind Entity Data Model with the Wizard, but then goes on to cover:

    • Many to many relationships
    • Entity splitting
    • Mapping with added conditions
    • Table Per Type (TPT) inheritance
    • Table Per Hierarchy (TPH) inheritance
    • Complex types
    • Create/update/delete SSDL functions
    • The SELECT SSDL function
    • Performing database operations based on views

    Added: May 21, 2008

    Matt Berseth AJAXifies the DetailsView of a Master/Details Web Form

    Regardless of whether the page's DataGrid and DetailsView controls' data source is an ObjectDataSource, LinqDataSource or EntityDataSource, the AJAX Control Toolkit's ModalPopup with a DetailsView on an UpdatePanel improves the data editing experience.

    Matt's Master-Detail with the GridView, DetailsView and ModalPopup Controls post of April 29, 2008 updates his prior version with a spiffed-up page design and now emulates saving changes to the back-end tables. Source code is available for download, and it's not much work to substitute a LinqDataSource or EntityDataSource for the ObjectDataSource.

    Click here for a live demo.

    If you're interested in AJAXifying DataGrids, read Matt's 7 simple steps to ajax-enable your ASP GridView

    Thanks again to Scott Guthrie for the heads-up.

    Added: May 21, 2008

    Agnes Molnar Continues Her LINQ4SP Demonstrations

    Hungarian SharePoint MVP Agnes Molnar (a.k.a. Aghy) shows her replacement for Bart DeSmet's LINQ to SharePoint implementation creating a lookup to a list in her LINQ4SP - How to create a new item with a lookup to another list? post of May 20, 2008. The post includes a link to a 02:30 silent screencast.

    Ryan Hauert Updates an EF Three-Level Table per Hierarchy Entity with Stored Procs

    Mapping ImportFunctions to stored procedures for updating base (Person) and inherited (Employee and Manager) types isn't a strictly intuitive process, so Ryan's Function Mapping with Inherited Types post of May 20, 2008 demonstrates the simplest approach, which is to create a single set of stored procedures for the base class and call them with wrapper functions in the SSDL file. A hitch in this process is that the wrapper functions are deleted each time you run the Update Database from Model operation.

    Each wrapper changes the discriminator column value to conform to the level in the hierarchy, as discussed in the Re: Stored Procedures with Inheritance post of April 28, 2008 in the ADO.NET Entity Framework and LINQ to Entities (Prerelease) forum and David DeWitter's Entity Framework Stored Procedure Generation post of the same date..

    Julie Lerman Discovers that EF Executes Stored Procs When Invoked, Not When Their Data is Needed

    Her Command Execution of directly called ImportFunctions (stored procs) in Entity Framework post of May 20, 2008 explains the situation, which doesn't seem surprising to me.

    ADO.NET Data Services to Add Replace Mode for Updates

    In his Merge vs. Replace Semantics for Update Operations post of May 20, 2008, Pablo Castro announces that Astoria's current Merge update semantics will be complemented by a Replace option. Replace mode for the HTTP PUT method is required by the AtomPub spec.

    The difference between the two modes is that Replace substitutes default property values for properties that aren't included in the uploaded message body's <Item> element, while Merge ignores missing properties. Missing links in Merge or Replace operations don't affect links on the server.

    ADO.NET Team Offers Two New Entity Framework Web Casts

    How Do I Get Started with the Entity Framework? (09:20)
    In this introductory video, Alex James will show you how to build a simple Entity Data Model in a short amount of time.

    How Do I Use the new EntityDataSource? (11:30)
    In this introductory video Diego Vega will show you how to use the EntityDataSource in an ASP.NET Application.

    SQL Server Compact 3.5 Runtime Bits Missing from VS 2008 SP1 Beta

    SQL Server Compact 3.5 SP1 Beta and Synchronization Services for ADO.NET v1.0 SP1 Beta runtime bits didn't make it into the VS 2008 SP1 Beta package but you can download and install them from the preceding link.

    Julie Lerman Takes on the Entity Framework Doubters

    Julie posted this link to Bloglines citations of Danny's post in her Responses to Danny Simmons "Why Entity Framework" post of May 20, 2008.

    Ironically, her post wasn't included in the Bloglines citation. (Several other cites in my Danny Simmons Answers the Frequently Asked Question: Why Use the Entity Framework? post were missing from Bloglines, too.)

    Rob Conery Runs into a LINQ to SQL Corner with his Repository Model

    He discovers "that if you set any Enumerable anything as a property, its Count property will be accessed when you load the parent object. This negates using any deferred loading for any POCOs, period." Yeah. That's run me nuts, too.

    Update May 22, 2008: Scott Allen left a comment about Rob's preceding statement: "I'd say that requires more investigation. Doesn't sound correct." As it turns out, Scott did do some investigation and concluded that an IList<T> type change caused the overeager loading. See Rob's Not So Lazy MVC Storefront of 5/21/2008. 

    Rob circumvents the problem by refactoring the MVC Storefront's Repository model, as described in his MVC Storefront: Intermission's Over, Made Some Changes post of May 19, 2008.

    Update May 21, 2008: Rob clarifies the identity of his clients (the Microsoft ASP.NET team, the "community" and himself) in MVC Storefront: Client Progress Meeting of May 20, 2008, which details how the MVC Storefront project came to be at MIX 08 and his recent progress meeting with his boss, Shawn Burke.

    Hopefully, it's time to go back to completing the code.

    The SQL Server Data Service Team Breaks Their Silence

    It's been a while since the last post from the SSDS folks. Soumitra Sengupta's What is going on at SQL Server Data Services of May 19, 2008 notes that SSDS is in the process of its second semi-monthly refresh after its introduction at MIX 08. Word on what new features, if any, the updates introduced will come some time after the refresh on May 20, 2008.

    SSDS will be back in business by 9:00 AM on 5/21/2008.

    SSDS documentation finally has been made public as the SQL Server Data Service Primer. The docs have some strange content, such as VS 2005 and .Net 3.0 being "recommended for Microsoft employees" to connect to SSDS. I recommend others use VS 2008 and .NET 3.5.

    Update 5/21/2008: The SSDS team is Correcting an error in our documentation.

    At MIX 07 the public beta was announced for July 2008. However, it's been pushed back two months to September 2008, according to Nigel Ellis's Introduction to New SQL Server Data Services: Web-Based Data Storage in a Cloud Web cast. I scheduled my Visual Studio Magazine article for the July issue to meet the original date; hopefully readers will be able to obtain a beta invitation if they aren't already "on-boarded" by July.

    Mike Taulty Finds the Replacement for ADO.NET Data Services' DataWebKeyAttribute

    Mike's ADO.NET Data Services and the Missing DataWebKeyAttribute post of May 19, 2008 explains that SP1 renamed it DataServicesKeyAttribute. This is consistent with the replacement of Web by Services in most class, method and property names.

    If the Entity Framework back-end can't detect the table's primary key column you mus prefix the the class declaration with [DataServicesKey("ColumnName")] as mentioned in the ADO.Net Data Services Over LINQ to SQL? forum post.

    Wally McClure Finds He Needs the Visual J# Redistributable to Get Meaningful Error Messages from ADO.NET Data Services

    Strange, but apparently true, as Wally reports in ADO.NET Data Services in.NET 3.5 SP1 Beta1 of May 19, 2008. He promises a podcast about his Astoria experiences shortly.

    Jon Skeet Gives Parallel LINQ a Workout with Nine Parallel LINQ (PLINQ) Mandelbrot Set Implementations

    The Mandelbrot set is an ideal test bed for determining the efficiency of parallel processing algorithms and libraries. So Jon Skeet, C# MVP in the UK, decided to compare the performance of Parallel LINQ (PLINQ) with the Parallel Extensions (ParallelFx) with a variety of different approaches. The benchmarks are downloadable from his Mandelbrot revisited - benchmark edition post of May 18, 2008, which includes code samples and commentary.

    Jon finds ParallelFx's ParallelForLoop implementation to have the best overall performance, but the PLINQ Unordered ParallelLinqInPlace approach wasn't far behind it.

    Sunday, December 30, 2007

    JSON vs. XML DataContract Serialization: Download Test Harness

    Rick Strahl's DataContractJsonSerializer in .NET 3.5 post of December 29, 2007 describes the .NET Framework 3.5's new DataContractJsonSerializer (DCJS) class from the System.Runtime.Serialization.Json.DataContractJsonSerializer namespace, which contains the serializer and related objects for the lightweight JavaScript Object Notation (JSON) transport (RFC 4627). JSON is one of ADO.NET Data Service's two wire formats, as noted in the "Julie Lerman: Astoria to Become ADO.NET Data Services" topic of Link and Entity Framework Posts for 12/10/2007+. (The Astoria Team intends to add plain old XML (POX) format to v1.0 by RTW.)

    Quick Summary: JSON serialization with DCJS requires about 25% to about 40% fewer bytes than the XML DataContractSerializer (DCS) class to represent moderately complex objects, such as Northwind Order and their their associated Order_Detail objects, and takes about 25% longer than the DCS class to serialize and deserialize.

    However, Windows Communication Foundation (WCF) serializes JSON streams to an internal XML Infoset wire format that requires about 50% more bytes than DCS to hydrate an object across a process boundary. Adding type="JSONDataType" attributes to each member's element contributes the additional bytes.

    The added time to serialize a moderate-sized object collection and the dramatic increase in the size of WCF messages indicates that JSON serialization isn't as lightweight as one would expect from its simple syntax.

    You can download the VB 9.0 code for the JsonSerializationWinVB.sln test harness project  here. The project requires Visual Basic 2008 Express or Visual Studio 2008 Standard or higher but doesn't need a database connection. (Mock generic data objects are provided.)

    The Test Harness

    Rick's sample code uses simple, lightweight objects and I wanted to verify whether the DCJS class actually was lighter in weight and as performant or better than the .NET Fx 3.0's DataContractSerializer (DCS) class with more complex classes containing a variety of data types, including Nullable<T>, and generic collections. So I created the following two classes with the LINQ In-Memory Object Generation (LIMOG) utility that's described in my Serializing Object Graphs Without and With References post of November 21, 2007.

    Here are C# versions of the class definitions for the Order and Order_Detail objects used in the tests:

    [DataContract(Name = "Order", Namespace = "")] 
    public class Order { 
        [DataMember(Name = "OrderID", Order = 1)] 
        public int OrderID { get; set; } 
        [DataMember(Name = "CustomerID", Order = 2)] 
        public string CustomerID { get; set; } 
        [DataMember(Name = "EmployeeID", Order = 3)] 
        public int? EmployeeID { get; set; } 
        [DataMember(Name = "OrderDate", Order = 4)] 
        public DateTime? OrderDate { get; set; } 
        [DataMember(Name = "RequiredDate", Order = 5)] 
        public DateTime? RequiredDate { get; set; } 
        [DataMember(Name = "ShippedDate", Order = 6)] 
        public DateTime? ShippedDate { get; set; } 
        [DataMember(Name = "ShipVia", Order = 7)] 
        public int? ShipVia { get; set; } 
        [DataMember(Name = "Freight", Order = 8)] 
        public decimal? Freight { get; set; } 
        [DataMember(Name = "ShipName", Order = 9)] 
        public string ShipName { get; set; } 
        [DataMember(Name = "ShipAddress", Order = 10)] 
        public string ShipAddress { get; set; } 
        [DataMember(Name = "ShipCity", Order = 11)] 
        public string ShipCity { get; set; } 
        [DataMember(Name = "ShipRegion", Order = 12)] 
        public string ShipRegion { get; set; } 
        [DataMember(Name = "ShipPostalCode", Order = 13)] 
        public string ShipPostalCode { get; set; } 
        [DataMember(Name = "ShipCountry", Order = 14)] 
        public string ShipCountry { get; set; } 
        [DataMember(Name = "Order_Details", Order = 15)] 
        public List<Order_Detail> Order_Details { get; set; } 
    } 
    [DataContract(Name = "Order_Detail", Namespace = "")]
    public class Order_Detail {
        [DataMember(Name = "OrderID", Order = 1)]
        public int OrderID { get; set; }
        [DataMember(Name = "ProductID", Order = 2)]
        public int ProductID { get; set; }
        [DataMember(Name = "UnitPrice", Order = 3)]
        public decimal UnitPrice { get; set; }
        [DataMember(Name = "Quantity", Order = 4)]
        public short Quantity { get; set; }
        [DataMember(Name = "Discount", Order = 5)]
        public float Discount { get; set; }
    }

    LIMOG adds the Name, Namespace, and Order attribute/value pairs; DCJS processes Name and Order attribute values and ignores Namespace values. I wrote custom SQL commands to generate object initializers for Northwind's last 20 Orders rows with their associated Order Details and Customer rows. A few of the orders are missing Nullable<DateTime> ShippedDate values.

    Following are the test harness's four operating modes. Click the image for a full-size capture.

    1. JSON (DCJS) Serialization with Parent (Order) Objects Only 

    Representative deserialized values appear below the column headers.

    2. JSON (DCJS) Serialization with Parent and Child  (Order_Detail) Objects

    LINQ queries populate the 1:many Order_Details associations.

    DateTime values serialize as "/Date(MillsecondsSince1970-01-01T00:00:00.000 +/- HHMM)/" strings, where HHMM is the offset from GMT in hours and minutes. (RFC 4627 doesn't specify a serialization format for date/time values, which has resulted in free-form encoding by various implementers. Stand-Alone JSON Serialization covers the current .NET implementation for ASP.NET AJAX services created in WCF.)

    3. XML (DCS) Serialization with Parent (Order) Objects Only

    4. XML (DCS) Serialization with Parent and Child (Order_Detail) Objects

    XML Infoset Wire Format for WCF Implementations: Parent (Order) Objects

    WCF implementations serialize JSON streams to a "internal" XML Infoset format defined by the Mapping Between JSON and XML white paper. The test harness uses the JsonReaderWriterFactory's CreateJsonReader method to instantiate an XmlDictionaryReader object whose ReadOuterXml method delivers the wire format as a string.

    The semi-formatted text of the Infoset follows the report of its length below the deserialized data:

    Note: I could find no documentation for the JsonReaderWriterFactory's CreateJsonReader method or creating the required XmlDictionaryReader object; I believe that this project contains the only publicly available example. (Search Google for CreateJsonReader.) Here's an excerpt from the test harness code that's based in part on Rick Strahl's example:

    Dim ser As DataContractJsonSerializer = _ 
       New DataContractJsonSerializer(GetType(List(Of Order))) 
    Dim ms1 As MemoryStream = New MemoryStream() 
    ser.WriteObject(ms1, lstOrders) 
    Dim json As String = Encoding.UTF8.GetString(ms1.ToArray()) 
    txtBytes.Text = json.Length().ToString() 
    ms1.Close() 
    Dim ms2 As MemoryStream = New MemoryStream(Encoding.UTF8.GetBytes(json)) 
    ' Deserialize into generic List 
    ser = New DataContractJsonSerializer(GetType(List(Of Order))) 
    Dim jsonOrders As List(Of Order) = _ 
        TryCast(ser.ReadObject(ms2), List(Of Order)) 
    ' Serialize JSON MemoryStream to WCS XML wire format 
    Dim xdrJson As XmlDictionaryReader = _ 
        JsonReaderWriterFactory.CreateJsonReader(ms2, _ 
        XmlDictionaryReaderQuotas.Max) 
    xdrJson.Read() 
    Dim xml As String = xdrJson.ReadOuterXml() 
    xdrJson.Close() 
    ms2.Close() 

    XML Infoset Wire Format for WCF Implementations: Parent and Child (Order_Detail) Objects

    As Rick mentioned in a comment to his post:

    @Roger - awesome work checking out the perf considerations. I suppose it's to be expected that JSON is slower since the parsing of the JSON objects is necessarily a bit more complex than parsing the more XML so I'm not terribly surprised that it's slower than XML.

    OTOH, you're not likely to use this on two way WCF communications, but only for AJAX/REST scenarios coming from a browser most likely and in that scenario there's not much choice since JSON is so much easier to use on the client than XML.

    Atom10FeedFormatter<TSyndicationFeed> and Atom10ItemFormatter<TSyndicationItem> generic objects (for classes derived from SyndicationFeed) are likely to be used for two-way WCF communications with ADO.NET data services. Magnus Mårtensson shows you in his Create your own Syndication Feeds with .NET Framework 3.5 post of November 22, 2007 how to use these two objects (and their RSS 2.0 equivalents) to create and serialize SyndicationFeeds. Guy Burstein offers a similar demonstration in his How To: Create a RSS Syndication Service with WCF post of December 3, 2007.

    Added: 1/1/2008

    Size of Serialized Messages and Serialize/Deserialize Execution Times

    Following is a summary table of the data collected for the four operating modes. Message sizes don't include whitespace. Execution times are the average of five tests conducted by reopening the form for each execution (to eliminate the effects of data caching.)

        Parent     Child  
    Serializer Time, s. Size, Bytes XML, Bytes Time, s. Size, Bytes XML, Bytes
    JDCS 0.416 7,559 14,942 0.467 13,253 31,253
    DCS 0.352 9,955 N/A 0.412 21,444 N/A

    The preceding data was for a Gateway S-5200D with a dual-core Pentium 2.6 GHz processor running Windows Vista Premium as a virtual client with 1GB RAM assigned under a Window 2005 R2 Virtual Server.

    Download the VB 9.0 source code for the JsonSerializationWinVB.sln test harness project  here and give it a try on your development machine.

    Updated 12/31/2007: Minor edits and additions

    Monday, December 10, 2007

    ASP.NET 3.5 Extensions Preview Released

    Updated 2/13/2008: See the "Data Services (Astoria Project)" topic.

    Scott Guthrie announced Sunday night in his ASP.NET 3.5 Extensions CTP Preview Released post that the extensions finally were available for download as a compact 3.64 MB ASPNetExt.exe file.

    Installation took a minute or two on my "real" Windows vista test machine but about three minutes on a virtual Vista instance. This is the first time I've encountered an "Installation is taking longer than expected" message from an installer.

    Update 12/11/2007: Setup adds Microsoft.Data.Web.dll, Microsoft.Data.Web.Design.dll, Microsoft.Data.WebClient.dll, System.Web.Extensions.dll, and System.Web.Extensions.Design.dll to the /Program Files/Reference Assemblies/Microsoft/Framework/ASP.NET 3.5 Extensions folder.

    Dynamic Data Support samples and the Microsoft AJAX Library install to a new \Program Files\Microsoft ASP.NET 3.5 Extensions folder.

    Here are links to the online Readme.htm file and QuickStart documentation.

    As mentioned in yesterday's update to the "Scott Guthrie: ASP.NET 3.5 Extensions Due on Sunday" topic of LINQ and Entity Framework Posts for 12/3/2007+, all five pieces of the preview are included in the installation:

    • ASP.NET Model-View-Controller (MVC) Add-in
    • ASP.NET AJAX Improvements
    • ASP.NET Dynamic Data Support
    • ASP.NET Silverlight Support
    • ADO.NET Data Services (Astoria) without the Silverlight client

    Dynamic Data Support

    Dynamic Data scaffolding uses LINQ to SQL as its object/relational mapper (O/RM), LinqDataSource v3.6 as the site's data source and new DynamicGridView and DynamicDetailsView controls.

    David Ebbo's Introducing the new Dynamic Data post gives a synopsis of the process for generating and customizing Dynamic Data pages.

    Here's a screen capture of the very subdued page for the Northwind Products table:

    Click above capture for a full-size (1024 x 768) image.

    The scaffolding enables creating a standardized set of Web forms with built-in navigation that's similar to the earlier (and now discontinued) Blinq project. Using LINQ to SQL as the O/RM limits v1.0 Dynamic Data sites to SQL Server as the RDBMS. David Ebbo says that support for LINQ to Entities will arrive in the future.

    The question here is: "What happened to the SubSonic-based "convention-driven" scaffolding?"

    Update 12/11/2007: The answer from Rob Conerly is in this comment to this post:

    >>The question here is: "What happened to the SubSonic-based "convention-driven" scaffolding?"<<

    It's coming :). Just need a week or 2 here.

    Model-View-Controller (MVC) Add-in

    Rob Conery, SubSonic's architect and primary developer, who's been working on the MVC UI Helpers (MVC Toolkit) for the last month, has posted two very detailed posts about MVC:

    ASP.NET MVC: Using RESTful Architecture of December 6, 2007 shows you how to "architect your MVC application using a RESTful approach, and also how you can partition out your 'logical bits' so you DRY (don’t repeat yourself)."

    ASP.NET MVC Preview: Using The MVC UI Helpers of December 5, 2007 explains how these helper methods "encapsulate UI code in the same way that Server Controls do with Web Forms."

    Note: The MVC Toolkit is a separate download that includes Dynamic Data for MVC projects and the code for Rob's MVC UI Helpers post. Get the toolkit here as an MVCToolkit.zip archive.

    Data Services (Project Astoria)

    The ADO.NET team's Mike Flasko lists the new and upgraded ASP.NET Data Services features in his ADO.NET Data Services ("Project Astoria") CTP is Released post.

    The Creating ADO.NET Data Services QuickStart instructions for ASP.NET Data Services show you how to get an Entity Framework-based data service up and running.

    Note: There is a typo and an error in the QuickStart instructions for the "Create the Data Service" topic.

    • In "When the Add New Item window appears, select SimpleDataService," replace SimpleDataService with ADO.NET Data Service.
    • The following instruction doesn't work for VB services. "In this example, the database was called Northwind so the namespace is NorthwindModel," you must replace NorthwindModel with SimpleDataService.NorthwindModel in the Imports statement to make NorthwindModel visible.
    • The VB version then fails with an "The member with identity 'NorthwindModel.Categories' does not exist in the MetadataCollection" error message written to Default.aspx.

    Update 2/13/2008: See the Fix for "Known Bug" when Creating ADO.NET Data Services with Visual Basic and a Web Application post for the workaroud to the last problem. There are a few other VB-specific problems under submission to the ADO.NET Data Services (Pre-Release) Forum.

    Following is the default Atom 1.0 list of tables from the C# version of the QuickStart example:

    And here's a capture of the first item of the Products collection:

    Click above capture for a full-size image.

    Notice that many:1 related entities have a type=entry and 1:many child collections have a type=feed. Services that return type=feed trigger IE 7's Feed template; you can read query output by a Page | View Source command.

    Update 12/12/2007: Alternatively, open IE's Tools | Internet Options | Content tab, click Settings in the Feeds section and uncheck the Turn on Feed Reading View option.

    Here's the source for the first two members of the Order_Details collections:

    Update 12/11/2007: Andy Conrad, Astoria technical lead, shows you in his LINQ to REST post how to create a data service with LINQ to SQL as the data source and query it with LINQ query expressions translated to URI syntax.

    Stay tuned for more about ASP.NET Data Services.

    Thursday, November 29, 2007

    ASP.NET .NET 3.5 Extensions Preview to Include Entity Framework Beta 3, ADO.NET Data Services

    Scott Guthrie's .NET Web Product Roadmap (ASP.NET, Silverlight, IIS7) post of November 29, 2007 states that Entity Framework Beta 3 (presumably with EDM Designer CTP 2) and a VS 2008 RTM-compliant preview of ADO.NET Data Services (formerly Project Astoria) will debut next week in conjunction with the newly-named ASP.NET 3.5 Extensions Release. Scott says, in part:

    • ADO.NET Data Services: In parallel with the ASP.NET Extensions release we will also be releasing the ADO.NET Entity Framework.  This provides a new modeling framework that enables developers to define a conceptual model of a database schema that closely aligns to a real world view of the information.  We will also be shipping a new set of data services (codename "Astoria") that make it easy to expose REST based API endpoints from within your ASP.NET applications.

    "In parallel with" and "also be shipping" don't necessarily mean "with the other pieces next week." Microsoft representatives wouldn't confirm to me that Entity Framework (EF) Beta 3, EDM Designer CTP 2, and the ADO.NET Data Services will release next week. I'll update this post when the actual release data is public.

    Update 12/7/2007: Microsoft released EF Beta 3 and EDM Designer CTP 2 on 12/6/2007, as reported in Entity Framework Beta 3 Available for Download of that date. Still no word on the Astoria release date other than "almost here." See the "ADO.NET Data  Services CTP1 'Almost Here' with LINQ to Astoria, New Wire Formats, and Increased Security" topic in LINQ and Entity Framework Posts for 12/3/2007+.

    Note: Joe Wilcox says "'Astoria' will be included in next week's ASP.NET 3.5 Extensions preview release. Astoria is Microsoft's incubation project for exposing data as a service" in his Microsoft Updates Web Developer Roadmap post of November 29, 2007.

    As "Something to watch," Joe adds:

    Microsoft's data model emphasis, which is more than just about rich Internet applications delivery. The emphasis directionally reveals something about Microsoft's forthcoming Web services platform. Data-driven may not be a new concept, but Microsoft is positioning for a leap frog over competitors. That's topic for another post. :)

    Other Elements of the ASP.NET .NET 3.5 Extensions Preview

    Scott's post also states that the extensions release will include:

    • ASP.NET MVC: This model view controller (MVC) framework for ASP.NET provides a structured model that enables a clear separation of concerns within web applications, and makes it easier to unit test your code and support a TDD workflow.  It also helps provide more control over the URLs you publish in your applications, and more control over the HTML that is emitted from them.  You can learn more about it from Part 1 of my ASP.NET MVC Tutorial series.  I'm hoping to find time this weekend to write and post Part 2 of the series. [Read more about the MVC Framework here.]
    • ASP.NET AJAX Improvements: New ASP.NET AJAX features in the ASP.NET 3.5 Extensions release will include better browser history support (back/forward button integration, and server-side history management support via a new <asp:history> server control), improved AJAX content linking support with permalinks, and additional JavaScript library improvements.
    • ASP.NET Dynamic Data Support: The ASP.NET 3.5 Extensions release will deliver new features that enable faster creation of data driven web sites.  It provides a rich scaffolding framework, and enables rapid data driven site development using both ASP.NET WebForms and ASP.NET MVC.
    • ASP.NET Silverlight Support: With the ASP.NET 3.5 Extensions release we'll deliver support for easily integrating Silverlight within your ASP.NET applications.  Included will be new controls that make it easy to integrate Silverlight video/media and interactive content within your sites.

    Update 11/30/2007: Rick Strahl's What's Ailing ASP.NET Web Forms essay provides the view of the current state of ASP.NET and a look at the future of ASP.NET MVC. It's written by an independent Web developer with many years of ASP and ASP.NET experience.

    ASP.NET Dynamic Data Support

    "Dynamic Data Support" sounds to me like Rob Conery's open-source SubSonic data access layer and Web page generator that I described in my SubSonic will be the "Convention-Driven Toolset for Microsoft’s New MVC Framework" for ASP.NET post of November 11, 2007 (updated 11/13, 11/18, and 11/29/2007.)

    Rob's working at Microsoft (but living on Kaua'i) and still maintaining his Weke Road personal blog. My post's "SubSonic's Continuing Open-Source Status" section described Rob's and Microsoft's commitment to continuing development of SubSonic as an open-source project.

    The "Moving Forward with .NET 3.5" topic of Rob's State Of SubSonic, November 2007 post of November 28, 2007 says:

    We’re shelving the query tool update that we’ve been planning. In fact we’re shelving any further feature change/innovation in favor of moving forward with .NET 3.5.

    There are soooo many language enhancements to .NET 3.5 that we have a chance to refactor and trim our feature set really nicely. For instance, our entire Sugar library can be redone as extension methods - which is what they should be.

    In addition, as many know, we have a lot of love coming for the new MVC framework.

    It doesn’t make sense to rev two branched versions of SubSonic that run on a different platform, so the next major version will be a version rev to 3.0, and will work on .NET 3.5 only.

    This doesn’t mean we won’t support/fix/tweak/patch 2.0 - we’ll always try to make it better. But in terms of features, it’s pretty much set.

    With regard to incorporating LINQ in the query tool and meshing with the MVC Framework, the "New Features for [SubSonic] 3.0" topic says:

    Eric and I have been talking a lot about the query tool and how to make it work with LINQ. I think we have a nice scheme planned, so expect to see a new query tool as we’ve discussed in the past.

    We’re going to throw all kinds of love at the new MVC toolset. All Kinds. It’ll be magic. And we’ll cook up some nice reference apps for you to play with. More on that later (when I figure out just what features I’ll be working on in the MVC toolset.

    Judging from this post, if Dynamic Data Support is based on SubSonic and the preview arrives next week, it would probably be an unmodified or slightly modified version of SubSonic 2.0. When the bits arrive next week, I'll update this and the 11/11/2007 post.

    Silverlight 1.1 Becomes Silverlight 2.0

    According to Scott, the next public Silverlight preview will include major upgrades to the WPF UI framework, add a "rich set of controls," including a DataGrid, provide REST, POX, RSS, and WS-* (plus, presumably ATOM Pub), and include LINQ to XML support. The number and significance of new features warrants a full version upgrade, so Silverlight 1.1 will become Silverlight 2.0.

    Microsoft plans a Silverlight 2.0 beta version for 2008Q1 with a GoLive license. VS 2008 Express Edition users will be glad to hear that the Silverlight toolset for VS 2008 will work with the free editions. (VS 2008 Professional Edition is required for the just-released Silverlight 1.1 tools.)