【问题标题】:Entity Framework 5 code first map string to varchar globally实体框架 5 代码首先将字符串全局映射到 varchar
【发布时间】:2013-08-18 17:17:33
【问题描述】:

我正在使用 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-code-first entity-framework-5


    【解决方案1】:

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

    【讨论】:

    • 如果您想将它们全部设置为 varchar 而不检查属性,请使用此选项:modelBuilder.Properties&lt;string&gt;().Configure(c =&gt; c.HasColumnType("varchar"));
    【解决方案2】:

    你必须写成:

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

    更多信息请查看link

    【讨论】:

    • 我意识到按照我的例子可以这样写。我确信它必须可以在全球范围内进行。
    • 你试过 fluent api 了吗?因为有时 DataAnnotation 不能给我们最好的结果
    • 我也遇到了这个问题,这对我有用。如果您已经像我一样创建了 NVarchar 列,这将使您添加的下一个 Code First 迁移解决问题(将 NVarchar 列转换为 Varchar)。太棒了!
    【解决方案3】:

    或者

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

    【讨论】:

    • 这是迄今为止建议的答案中最简单和最干净的。谢谢!
    猜你喜欢
    • 1970-01-01
    • 2011-08-29
    • 1970-01-01
    • 2011-11-29
    • 1970-01-01
    • 1970-01-01
    • 2011-08-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多