Monthly Archives: July 2007

ClickOnce on Vista installation problem SOLVED!

A few months ago, ClickOnce broke on my Vista machine where I was doing development. I had the same problem on my Vista laptop which I use for travelling and presentations. The short story about the problem is that whenever I tried to install a clickonce app, Vista went into this never-ending loop of insisting that I install .NET Framework and WinFx Runtime Components. The detailed description of the problem is blogged here.

A few people posted comments saying they had the same problem. Yesterday another person left a similar comment which put me on the trail to try to get it solved again. Patrick Darragh, who was a previous owner of ClickOnce at Microsoft hooked me up with Scott Tucker who is now working with ClickOnce. After I packed up my project and some other files to send to Scott, I emailed some of the people who had left comments to see what their status was.

One of them, John Sinclair, emailed me back saying that he had figured out the problem! (I will refrain from entering about a hundred exclamation points there. :-))

It turned out that by using .NET’s command line tool, MAGEUI to manually build manifests was the source of my problem. What I didn’t realize, until John pointed it out, is that the first time you select a different program to run, Vista has the checkbox for “always use this” ON BY DEFAULT. That’s bad bad bad. I thought defaults were supposed to be false  [Don Kiely has a better end for my sentence:] “safe and sensible”.

 Then when trying to install ANY clickonce application, for example, the XAML Pad app in this post by Charles Petzold, would somehow trigger the .NET installer. It doesn’t make perfect sense to me why trying to open up MAGEUI from Internet Explorer would fire off all of that nonsense, but that’s what it did.

So the fix was to go into Vista’s Default Programs settings (available from the start button, then into “Associate a file type or protocol with a program” and change the default app to “Application Deployment Support Library”. Here is what it looked like before I fixed the problem

Oddly, while IE7 exhibited this problem, Firefox did not. However Firefox must still be using the default app lists because it doesn’t have any information about what to do with .application files in it’s settings:

 

A cloud in the wrong place

It rained for over 24 hours. Now things are clearing out. I looked out the window of my office to see this thick fog cloud that had settled in the valley that is the road between the hill I live on and the next hill over. Since the sun had already set, even though it looked amazing in real life, it was hard to capture so, you’ll have to live with my usual crappy photographic skills.

Entity Framework, Some Before & After tidbits

I wanted to see some of the new Beta2 (in the June CTP bits) functionality of Entity Framework so I’ve been poking around. You can see a nice list of what to look for on Danny Simmons’ blog.


One thing that was a huge source of frustration was the inability to support database constraints where a column was both a primary key and also a foreign key of another table. When using the EF Wizard to import database schemas, this would be part of a list of errors that were generated during the model creation and would result in a problem like this:

Notice that you can’t get back to the ORDER that owns the Order_Detail.

With the new CTP, that problem goes away.

You can’t traverse over Order_details because it is a  collection property, but you can get at properties like Count, etc…

Dim od = From o In NWEntities.Orders Where o.ShipCountry = “Spain” _
Select o.Customers.CompanyName, o.Order_Details.Count
    


Another thing, of course was the difficulty of working with existing views and stored procedures.

Here’s a before and after of the wizard:

 

      

But the sproc and view support goes much deeper.

Unfortunately, I don’t see the wizard carrying the views and stored procs all the way through. If you look at the SSDL, you will see that the views are described as any other table. The stored procs are <function> elements.

While I can’t figure out how to surface the query function, there are also functions to let you use your own sprocs for insert, updates and deletes and tie them into EF’s SaveChanges function. Shyam Pather wrote a post about this a while ago on the ADONET Team blog and now that stuff is in this version along with documentation examples.

Another SPROC goody is the ability to define your own stored procedures in your model without  needing it in the database. Check the DefiningQuery element that goes in the SSDL to achieve this.


Poking around in the CSDL, I see a few changes which tie back to the references.

A Key used to be an attribute of an Entity Type. Now it is an element.

Beta1:   <EntityType Name=”Employees” Key=”EmployeeID”>

CTP:   <EntityType Name=”Employees”>
    <Key>
      <PropertyRef Name=”EmployeeID” />
    </Key>


So that they could do this:

 <EntityType Name=”Order_Details”>
    <Key>
      <PropertyRef Name=”OrderID” />
      <PropertyRef Name=”ProductID” />
    </Key>

Which then enables us to do this:

  <Association Name=”FK_Order_Details_Orders”>
    <End Role=”Orders” Type=”Model.Orders” Multiplicity=”1″ />
    <End Role=”Order_Details” Type=”Model.Order_Details” Multiplicity=”*” />
    <ReferentialConstraint>
      <Principal Role=”Orders”>
        <PropertyRef Name=”OrderID” />
      </Principal>
      <Dependent Role=”Order_Details”>
        <PropertyRef Name=”OrderID” />
      </Dependent>
    </ReferentialConstraint>
  </Association>
  <Association Name=”FK_Order_Details_Products”>
    <End Role=”Products” Type=”Model.Products” Multiplicity=”1″ />
    <End Role=”Order_Details” Type=”Model.Order_Details” Multiplicity=”*” />
    <ReferentialConstraint>
      <Principal Role=”Products”>
        <PropertyRef Name=”ProductID” />
      </Principal>
      <Dependent Role=”Order_Details”>
        <PropertyRef Name=”ProductID” />
      </Dependent>
    </ReferentialConstraint>
  </Association>

Which is describing this from the database:


 Speaking of the database, there was mention of the fact that it’s now easier to get at the underlying datastore. I haven’t figured out how though, yet. I looked to see if you could now cast an EntityConnetion to a SqlConnection but that’s not it. I’ll keep an eye out for that. While I was looking though I noticed a bunch of new methods in the ObjectContext such as the pieces that go along with attaching and detaching such as “Addto” methods for each of the entities in the objectContext.


 The last thing I’ll shove into this already long post is that Entity constructors are no longer auto-generated. This will make customization a lot easier (you can read about that in this post from Danny Simmons).

So where we had this in Beta 1:

  Partial Public Class Employees
        Inherits Global.System.Data.Objects.DataClasses.Entity
        ”'<summary>
        ”’Initialize a new Employees object.
        ”'</summary>
        Public Sub New()
            MyBase.New
            ‘Call DoFinalConstruction if this is the most-derived type.
            If (CType(Me,Object).GetType Is GetType(Global.NorthwindModel.Employees)) Then
                Me.DoFinalConstruction
            End If
        End Sub
        ”'<summary>
        ”’Initialize a new Employees object.
        ”'</summary>
        ”'<param name=”employeeID”>Initial value of EmployeeID.</param>
        ”'<param name=”lastName”>Initial value of LastName.</param>
        ”'<param name=”firstName”>Initial value of FirstName.</param>
        Public Sub New(ByVal employeeID As Integer, ByVal lastName As String, ByVal firstName As String)
            MyBase.New
            Me.EmployeeID = employeeID

            Me.LastName = lastName

            Me.FirstName = firstName

            ‘Call DoFinalConstruction if this is the most-derived type.
            If (CType(Me,Object).GetType Is GetType(Global.NorthwindModel.Employees)) Then
                Me.DoFinalConstruction
            End If
        End Sub

Although the constructor is gone (along with the acrobatics that would require creating your own constructors) there is a new method for creating each entity:

     Public Shared Function CreateEmployees(ByVal employeeID As Integer, ByVal lastName As String, ByVal firstName As String) As Employees
            Dim employees As Employees = New Employees
            employees.EmployeeID = employeeID
            employees.LastName = lastName
            employees.FirstName = firstName
            Return employees
        End Function

A week of great sunsets

We’ve had weird weather all week. Constant forecasts of thunderstorms that never come and the air and sky is filled and ready to go for it constantly.It has made for some great sunsets. We saw an amazing one while at the Bob Dylan concert on July 1st thanks to a big cloud that was stuck on Mt. Mansfield.

There was another great one tonight that we saw from a friends house up on a hill.

I took this one from our front balcony earlier this week.

Is that Silverlight on Amazon.com?

I opened up the Amazon.com site today and was quite startled to see this:


But when I viewed the source, I saw that rather than just one DIV that embedded all of this functionality (which is what I would expect from a Silverlight object) , there was a ton of html and script pulling this off, including a reference to:

 new SWFObject(“http://g-ec2.images-amazon.com/images/G/01/s9-ampaigns/MultiPackCarousel._V19505961_.swf

SWF spells Flash. Oh well.

Intro to ADO.NET Entity Framework at VTdotNET on Monday

Finally, I get to share Entity Framework with my own user group (in Burlington, VT)! Yay.

When: Monday, July 9th, 6-8:30pm

Where: Champlain College, Hauke Building Room 005 (375 Maple Street, Burlington, VT)

More info at www.vtdotnet.org

Of course, I’m spending all of my time futzing with the new bits that just got released earlier this week.

Not only do I have a cool technology to show off but we’ve got awesome raffles from Infragistics (a license to NetAdvantage) and from Code Zone (a fingerprint reader, Vista Ultimate license, a book from MSPress (Visual C# 2005: The Language) and some more of the fun GEEK mugs.

rspv@vtodtnet.org for pizza ($5 for pizza & soda – no sponsor this month).

Thanks to the Software Engineering Department at Champlain College for sponsoring the cost of the room all summer.