如何使用ASP.net EF Codefirst Data Annotations将SQL Server中的列设置为varchar(max)?

Mad*_*r24 46 c# sql-server entity-framework ef-code-first

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

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

我试过[MaxLength]没有成功.

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

[Column(TypeName = "varchar")]
public string MediaDesc { get; set; }
Run Code Online (Sandbox Code Playgroud)

Sla*_*uma 73

[Column(TypeName = "varchar(MAX)")]
Run Code Online (Sandbox Code Playgroud)

令人惊讶的是,最明显的解决方

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


Die*_*hon 15

这会让你nvarchar(max):

[StringLength(int.MaxValue)]
Run Code Online (Sandbox Code Playgroud)

我不认为有一个强制非unicode的属性(你确定你想要吗?),所以varchar(max)你需要在DbContext中进行调整:

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
    modelBuilder.Entity<Entity>().Property(x => x.MediaDesc).IsUnicode(false);
}
Run Code Online (Sandbox Code Playgroud)

  • 我刚刚发现与`[Column(TypeName ="varchar")]`属性的组合是问题所在.没有它也可以使用`MaxLength`和`StringLength`.+1 (3认同)
  • 我认为使用`MaxLength`是最惯用的(并且简洁),但是`StringLength`和`MaxLength`都比明确指定列类型名称要好得多,正如接受的答案所做的那样. (2认同)

bhu*_*vin 5

使用 [MaxLength] 注释。

[Column(TypeName = "varchar")]
[MaxLength]
public string MediaDesc { get; set; }
Run Code Online (Sandbox Code Playgroud)

  • 对我来说,这会创建一个 `varchar(8000)` 列,而不是 `varchar(MAX)`。 (7认同)
  • MaxLength 是验证,而不是列定义 (3认同)