(NOTE: This is Model First development in Entity Framework–start with a data model in the Entity Framework Designer and then generate database schema from the model).
When you add a scalar property of type string to an entity data model, you can fill in the values of several other properties within Visual Studio.
- Fixed Length – (None), True, False
- Max Length – (None), value, Max
- Unicode – (None), True, False
What does a value of (None) mean for these properties (when generating SQL Server Database from model)?
- Fixed Length – (None) equivalent to False
- Max Length – (None) equivalent to Max
- Unicode – (None) equivalent to True
Here’s how choices for these properties map to SQL Server data types:
- Fixed=True, Max=20 – nchar(20)
- Fixed=(None), Max=20 – nvarchar(20)
- Fixed=False, Max=20 – nvarchar(20)
- Fixed=(None), Max=(None) – nvarchar(max)
- Fixed=True, Max=(None) – nchar(4000)
- Fixed=False, Max=(None) – nvarchar(max)
- Fixed=(None), Max=Max – nvarchar(max)
- Fixed=True, Max=Max – nchar(4000)
- Fixed=False, Max=Max – nvarchar(max)
- Fixed=(None), Max=20, Unicode=True – nvarchar(20)
- Fixed=(None), Max=20, Unicode=False – varchar(20)
This means that if you just pick String as the type and set nothing else, you’ll get nvarchar(max) as the SQL Server type.
NOTE: The value of 4,000 is being used because the maximum length of a fixed length string in SQL Server is 4,000 characters (8,000 bytes when encoded as UTF-16).