Tuesday, June 22, 2010

LINQ, Reserved Names and .Net

Here's another good reason not to use reserved names.

I'm working on a LINQ project with a series of tables that manage user roles. As a result, I have table names like Systems, Roles and Users.
My trouble started when I would add the objects to the Designer, hit Save and then suddenly Visual Studio would say things like

"System.Data.Linq.Mapping.DatabaseAttribute is not defined"
"System.Nullable is not defined"

In short, stopping me dead in my tracks. Now that I look back, I don't know why I didn't see the reason earlier.

When using the Object Relational Designer, Visual Studio wants to be smart and changes any words that are plural to singular so they make more sense when dealing with data.

That way, your code looks like

oUser = New User
oUser.UserName = "John"

instead of
oUser = New Users

This is really nice because it does make the code a little more legible except in this situation:

Plural (singular)
Users (User)
Roles (Role)
UserRoles (UserRole)
Systems (System)

See the gotcha? Visual Studio translated the "Systems" table into a "System" object which immediately negated all of the main namespaces in the project.

The renaming feature for the objects in LINQ-to-SQL is great - but be warned, when you start getting errors like this, take a look at your source tables.

No comments: