views:

22

answers:

1

Hello,

I have a query that errors out when I use it in a MVC 2.0 project, but not when I run unit tests against it (works fine). Below is the query, "User" is an entity. The error I get shows up on the Known issues to consider for EF (http://msdn.microsoft.com/en-us/library/bb896317.aspx) but it seems pretty basic this should work, and I'm not really doing what they are doing. This is targeting the 3.5 framework and sql 2005 backend.

The error is

"Unable to create a constant value of type 'Closure type'. Only primitive types ('such as Int32, String, and Guid') are supported in this context."

The query is

User user = (from u in db.Users
                where u.UserId == (Guid)providerUserKey
                && u.Application.LoweredApplicationName == this.ApplicationName.ToLower()
                select u).FirstOrDefault();

I was able to determine that the query fails because of selecting "User". The same query however works perfectly fine when I use u.UserName = userName. I have also tried variations like UserId.ToString() (also not supported) and u.UserId.CompareTo((Guid)providerKey) > 0. All throw errors of some type.

Any ideas?

Thanks!

+1  A: 

From this post, it looks like the problem is with providerUserKey, not with u.UserId.

Try assigning providerUserKey to a Guid, and using that:

Guid id = (Guid)providerUserKey;

User user = (from u in db.Users
                where u.UserId == id
                && u.Application.LoweredApplicationName == this.ApplicationName.ToLower()
                select u).FirstOrDefault();
adrift
That did the trick, not sure how you found that article, I was looking for something just like that for an hour or so then just posted the question. Anyways thanks again!
Dave