我正在玩EF 5和代码。到目前为止我真的很喜欢它,但我注意到它默认字符串列为nvarchar。如果我想使用varchar,那么我必须明确告诉它。
我可以强制它为字符串使用varchar而不是nvarchar,如下所示:
public class Member
{
public int id { get; set; }
[MaxLength(255), Required, Column(TypeName = "varchar")]
public string firstName { get; set; }
[MaxLength(255), Required, Column(TypeName = "varchar")]
public string surname { get; set; }
}
我几乎在所有情况下都会使用varchar而不是nvarchar,所以我更希望将字符串列全局映射到varchar,并且如果需要的话,能够在每列的基础上设置nvarchar。
有谁知道这样做的方法?我试图省略为模型中的每个字符串列键入[Column(TypeName =“varchar”)]的需要。
在EF 6上,您可以使用它来映射每个字符串属性以使用varchar而不是nvarchar
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Properties()
.Where(x =>
x.PropertyType.FullName.Equals("System.String") &&
!x.GetCustomAttributes(false).OfType<ColumnAttribute>().Where(q => q.TypeName != null && q.TypeName.Equals("varchar", StringComparison.InvariantCultureIgnoreCase)).Any())
.Configure(c =>
c.HasColumnType("varchar"));
}
在EF 6上,您可以使用它来映射每个字符串属性以使用varchar而不是nvarchar
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Properties()
.Where(x =>
x.PropertyType.FullName.Equals("System.String") &&
!x.GetCustomAttributes(false).OfType<ColumnAttribute>().Where(q => q.TypeName != null && q.TypeName.Equals("varchar", StringComparison.InvariantCultureIgnoreCase)).Any())
.Configure(c =>
c.HasColumnType("varchar"));
}
你必须把它写成:
[Column(TypeName = "VARCHAR")]
public string firstName { get; set; }
有关很多信息,请查看此信息 链接
要么
modelBuilder.Properties<string>().Configure(c => c.IsUnicode(false));