我一直在网上搜索,试图找出正确的语法,让实体框架代码首先创建带有列的表:varchar(max)。
这就是我所拥有的。默认情况下,这将创建 varchar(128)。如何创建 varchar(max)?
我尝试过[最大长度]但没有成功。
任何帮助将不胜感激。谢谢!
[Column(TypeName = "varchar")]
public string MediaDesc { get; set; }
[Column(TypeName = "varchar(MAX)")]
令人惊讶的是,最明显的解决方案有效。
[MaxLength]
属性仅创建一个最大长度不是 MAX 但 - 在我的情况下 (SQL Server Express 2008 R2) - 8000 的varchar
列。
这会让你nvarchar(max)
:
[StringLength(int.MaxValue)]
我不认为有一个属性可以强制非 unicode(你确定你想要吗?),所以varchar(max)
你需要在 DbContext 中进行调整:
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<Entity>().Property(x => x.MediaDesc).IsUnicode(false);
}
使用 [MaxLength] 注释。
[Column(TypeName = "varchar")]
[MaxLength]
public string MediaDesc { get; set; }
更新@Slauma答案。
在OnModelCreating
中对所有字符串使用覆盖:
modelBuilder.Properties<string>().Configure(s =>
s.HasMaxLength(256).HasColumnType("nvarchar"));
然后使用如下所示的属性修改属性:
[Column(TypeName = "nvarchar(MAX)")]
public string CaseComment { get; set; }
或者这个:
modelBuilder.Entity<YourClass>()
.Property(b => b.CaseComment)
.HasColumnType("nvarchar(MAX)");
这可能会导致异常。 Validation failed for one or more entities. See 'EntityValidationErrors' property for more details.
即使该列的数据类型正确,实体框架仍然认为它是nvarchar(256)
的,并抛出错误DbEntityValidationException
。
要解决此问题,请改用以下命令:
[Column(TypeName = "nvarchar(MAX)")]
[MaxLength]
public string CaseComment { get; set; }
或
modelBuilder.Entity<YourClass>()
.Property(b => b.CaseComment)
.HasColumnType("nvarchar(MAX)")
.HasMaxLength(null);
[Column(TypeName = "varchar(MAX)")]
在数据库中产生varchar(Max)。 如果您有自定义约定将字符串 MaxLength 设置为 100,
modelBuilder
.Properties<string>()
.Configure(c => c.IsUnicode(false).HasMaxLength(100));
您需要在 [Column(TypeName = "varchar(MAX)"), MaxLength]
中包含最大长度属性。 如果不这样做,您将在数据库中获得 varchar(MAX),但验证将抛出超过 100 个字符。