DbMigration&;在实体框架中编译之前的DbModelBuilder行为

本文关键字:编译 行为 DbModelBuilder 框架 amp 实体 DbMigration | 更新日期: 2023-09-27 18:20:24

我有一个这样的属性:

[AttributeUsage(AttributeTargets.Property, AllowMultiple = false)]
public class IsUnicodeAttribute : Attribute
{
    public bool IsUnicode { set; get; }
    public IsUnicodeAttribute(bool isUnicode)
    {
        this.IsUnicode = isUnicode;
    }
}

我在DbModelBuilder上读到:

modelBuilder.Properties<String>()
            .Having(p => p.GetCustomAttributes(false).OfType<IsUnicodeAttribute>().FirstOrDefault())
            .Configure((config, attr) => config.IsUnicode(attr.IsUnicode));

虽然还没有数据库,但我启用了迁移并添加了第一个迁移。但是,我注意到,在创建的迁移文件中,没有指示那些用属性标记为Unicode的列。

是因为我在配置中出错,还是因为在运行时不知道属性的IsUnicode属性的值,还是Unicode是默认值?

我使用的是EF 6.1.1。

DbMigration&;在实体框架中编译之前的DbModelBuilder行为

我刚刚在数据库创建后检查了它,发现事实上NVARCHAR是我在类模型中声明的所有string属性的数据类型,而不需要在它们上面指定IsUnicode

这看起来至少是SQL Server提供程序的默认设置。

编辑:我使用了modelBuilder.Entity<T>().Property(a => a.Message).IsUnicode(false),创建的迁移文件实际上指定了它。事实证明,字符串默认为Unicode,因此在迁移文件中不需要指定,并且默认情况下看起来是NVARCHAR;不是固定大小。