LINQ Error: String must be exactly one character long.

When working with some Linq today, I kept getting the following error:



String must be exactly one character long.


This one had me scratching my head for a while.  Turns out the problem was in the Linq to SQL designer, and the way the code generator interpreted results from the view I was using.


The problem stems from the designer translating a varchar(1) to a system.char(1), a fixed length variable, instead of a system.string, which can have a variable length.  If the value is blank or NULL (allowable in the database), the fixed length condition isn’t met and an error is thrown.


To remedy this, go back to the designer, pin the Properties sidebar open, and look at the elements which have been mapped.  Any one which is mapped to Char(1) should be changed to a String.  This should fix your problem.


Below, the image on the left shows the improper mapping, and the image on the right shows the fixed mapping.

How to tell what version of SQL Server you’re running

Anytime something doesn’t work quite right, there’s always the question of
which version and service pack level of SQL Server you’re running.

For SQL Server 2005, there’s a simple query you can run which will tell you
the version, service pack and edition (standard, enterprise, etc):

SELECT  SERVERPROPERTY(‘productversion’), SERVERPROPERTY
(‘productlevel’), SERVERPROPERTY (‘edition’)

The full article, with queries for SQL Server 6.5 to 2005, is at http://support.microsoft.com/kb/321185.