51

我一直在网上搜索,试图找出正确的语法,让实体框架代码首先使用列创建我的表:varchar(max)。

这就是我所拥有的。默认情况下,这会创建 varchar(128)。如何创建 varchar(max)?

我试过 [MaxLength] 没有成功。

任何帮助,将不胜感激。谢谢!

[Column(TypeName = "varchar")]
public string MediaDesc { get; set; }
4

5 回答 5

85
[Column(TypeName = "varchar(MAX)")]

令人惊讶的是,最明显的解决方案有效。

[MaxLength]属性仅创建一个varchar最大长度不是 MAX 的列,但在我的情况下(SQL Server Express 2008 R2)为 8000。

于 2012-06-28T08:21:53.517 回答
18

这会让你nvarchar(max)

[StringLength(int.MaxValue)]

我认为没有强制非 unicode 的属性(您确定要这样做吗?),因此varchar(max)您需要在 DbContext 中进行调整:

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
    modelBuilder.Entity<Entity>().Property(x => x.MediaDesc).IsUnicode(false);
}
于 2012-06-28T16:28:04.690 回答
5

使用 [MaxLength] 注释。

[Column(TypeName = "varchar")]
[MaxLength]
public string MediaDesc { get; set; }
于 2012-06-28T06:23:31.800 回答
1

@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);
于 2018-03-16T08:20:03.807 回答
0

[Column(TypeName = "varchar(MAX)")]导致数据库中的 varchar(Max)。如果您有自定义约定将字符串 MaxLength 设置为 100,

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

您需要包含 MaxLength 属性[Column(TypeName = "varchar(MAX)"), MaxLength]。如果不这样做,您将在数据库中获得 varchar(MAX) 但验证将抛出超过 100 个字符。

于 2016-07-14T15:11:13.077 回答