问题 实体框架5代码首先将字符串映射到varchar全局


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


6953
2017-08-16 10:14


起源



答案:


在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"));
    }

10
2017-10-09 22:30



如果要在不检查属性的情况下将它们全部设置为varchar,请使用此选项: modelBuilder.Properties<string>().Configure(c => c.HasColumnType("varchar")); - Jamie Ide


答案:


在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"));
    }

10
2017-10-09 22:30



如果要在不检查属性的情况下将它们全部设置为varchar,请使用此选项: modelBuilder.Properties<string>().Configure(c => c.HasColumnType("varchar")); - Jamie Ide


你必须把它写成:

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

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


4
2017-08-17 07:34



我意识到它可以按照我的例子这样写。我确信必须有可能在全球范围内做到这一点。 - Laurence Frost
您是否尝试过流畅的api?,因为有时DataAnnotation并没有给我们最好的结果 - Elvin Mammadov
我也有这个问题,这对我有用。如果您已经像我一样创建了NVarchar列,这将使您添加的下一个Code First迁移修复此问题(将NVarchar列转换为Varchar)。好样的! - Greg Barth


要么

modelBuilder.Properties<string>().Configure(c => c.IsUnicode(false));

-1
2018-05-06 15:30