Naz*_*gol 21 orm entity-framework ef-code-first entity-framework-4.1
我花了相当多的时间来解决这个问题,但仍然无法弄清楚为什么EF团队使用Code First让生活如此艰难.
以下是一些示例:
我的POCO:
我想要的东西看起来像:
public class Post
{
public int Id {get; set;}
public string Text {get; set;}
}
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<Post>()
.Property(p => p.Text)
.HasColumnType("nvarchar(max)");
}
Run Code Online (Sandbox Code Playgroud)
唯一有效的方法:
public class Post
{
public int Id {get; set;}
[StringLength(4000)]
public string Text {get; set;}
}
Run Code Online (Sandbox Code Playgroud)
问题是,在第一种情况下,我尝试插入它给我的任何东西:Validation failed for one or more entities
第二种情况不适合我的商业模式.
我是唯一有这个问题的人吗?我该如何处理这件事?
And*_*tus 38
Int32.MaxValue
连接到SQL Server数据库时,使用可能会导致一些问题.使用Int32.MaxValue
任一属性或API抛出一个异常,指出"String列,用的MaxLength大于4000,不支持".但是,在EF 4.1中使用以下任一方法都可以正常工作:
你可以使用MaxLengthArritbute
,例如
[MaxLength]
public string Text { get; set; }
Run Code Online (Sandbox Code Playgroud)
或者像流畅的API一样
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<Post>()
.Property(s => s.Text)
.IsMaxLength();
}
Run Code Online (Sandbox Code Playgroud)
要强制使用ntext
以下其中一项:
[MaxLength]
[Column(TypeName = "ntext")]
public string Text { get; set; }
Run Code Online (Sandbox Code Playgroud)
或者像流畅的API一样
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<Post>()
.Property(s => s.Text)
.HasColumnType("ntext")
.IsMaxLength();
}
Run Code Online (Sandbox Code Playgroud)
MaxLength
在这种情况下,您可能不需要该属性.
更新(2017年9月6日):
正如Sebazzz在他的评论中所指出的那样ntext
(和text
)在SQL Server 2016中已被弃用.以下是进一步信息的链接:
归档时间: |
|
查看次数: |
13641 次 |
最近记录: |