In Entity Framework code-first, if you have a domain model like the following:
public class Country { public int Id { get; set; } [Index] public string IsoCode { get; set; } }
and want to create an index for a string property, when you execute
update-database
for your migration, you may end up with the following error:Column ‘{column_name}’ in table ‘{table_name}’ is of a type that is invalid to use as key column in an index.
This usually happens when you use VARCHAR(max)
, which is the default column type when creating a string property in EF.
To make it work properly you need to specify the maximum length of your string property, so that the above model may be transformed to:
public class Country { public int Id { get; set; } [Index] [Column(TypeName = "VARCHAR")] [StringLength(2)] public string IsoCode { get; set; } }
Then, when you update your database using
update-database
command the execution will be completed successfully.