12

我正在玩 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")] 的需要。

4

3 回答 3

10

在 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"));
    }
于 2014-10-09T22:30:11.007 回答
4

你必须把它写成:

[Column(TypeName = "VARCHAR")]
public string firstName { get; set; }

有关许多信息,请查看此链接

于 2013-08-17T07:34:52.920 回答
4

或者

modelBuilder.Properties<string>().Configure(c => c.IsUnicode(false));
于 2017-05-06T15:30:21.310 回答