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。
我刚刚在数据库创建后检查了它,发现事实上NVARCHAR
是我在类模型中声明的所有string
属性的数据类型,而不需要在它们上面指定IsUnicode
。
这看起来至少是SQL Server提供程序的默认设置。
编辑:我使用了modelBuilder.Entity<T>().Property(a => a.Message).IsUnicode(false)
,创建的迁移文件实际上指定了它。事实证明,字符串默认为Unicode,因此在迁移文件中不需要指定,并且默认情况下看起来是NVARCHAR
;不是固定大小。