Sql server 强制实体框架6(EF6)使用nvarchar(最大值)
我以为这很容易,但是 如何强制EF6使用Sql server 强制实体框架6(EF6)使用nvarchar(最大值),sql-server,entity-framework,ef-code-first,Sql Server,Entity Framework,Ef Code First,我以为这很容易,但是 如何强制EF6使用nvarchar(MAX) 我试过: [Column(TypeName = "nvarchar(MAX)")] 及 及 modelBuilder.Entity().Property(o=>o.test).HasColumnType(“nvarchar(MAX)”); 我使用的是EF6.2.0和SQL2014 Express如果未指定长度,则EF代码首先默认为nvarchar(max),因此如果指定名称列: public string Name { ge
nvarchar(MAX)
我试过:
[Column(TypeName = "nvarchar(MAX)")]
及
及
modelBuilder.Entity().Property(o=>o.test).HasColumnType(“nvarchar(MAX)”);
我使用的是EF6.2.0和SQL2014 Express如果未指定长度,则EF代码首先默认为nvarchar(max),因此如果指定名称列:
public string Name { get; set; }
您将获得一个nvarchar(max)列
如果需要指定长度,例如100个字符,则可以在代码中指定该列:
[StringLength(50)]
public string Name { get; set; }
如果需要指定varchar而不是nvarchar,则可以使用:
[Column(TypeName = "VARCHAR")]
[StringLength(50)]
public string Name { get; set; }
请参见和您也可以将其默认设置为所需的长度,而不是在任何地方键入。 重写dbcontext类中的函数OnModelCreating
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
foreach (var property in modelBuilder.Model.GetEntityTypes()
.SelectMany(t => t.GetProperties()).Where(p => p.ClrType == typeof(string)))
{
if (property.GetMaxLength() == null)
{
property.SetMaxLength(256);
}
if (string.IsNullOrEmpty(property.GetColumnType()))
{
property.SetColumnType("varchar");
}
}
}
你说得对。我使用sp_columns检查我的表模式,它返回
ntext
而不是nvarchar
,因此我认为它没有正确定义列。谢谢您应该在数据库模型上使用[MaxLength(100)]
,而不是StringLength
<代码>字符串长度用于视图模型上的数据验证。(是的,我知道,它们在这里对string
)嗯,StringLength
对byte[]
不起作用,只是MaxLength
和MinLength
。另外,如果您使用StringLength
,这也适用于viewmodel验证,那么您可能会在视图中使用数据库模型,这是一个糟糕的设计。我尝试过这个方法,但是modelBuilder
中没有Model
;显然,这只适用于.NETCore。
[Column(TypeName = "VARCHAR")]
[StringLength(50)]
public string Name { get; set; }
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
foreach (var property in modelBuilder.Model.GetEntityTypes()
.SelectMany(t => t.GetProperties()).Where(p => p.ClrType == typeof(string)))
{
if (property.GetMaxLength() == null)
{
property.SetMaxLength(256);
}
if (string.IsNullOrEmpty(property.GetColumnType()))
{
property.SetColumnType("varchar");
}
}
}