gpt4 book ai didi

entity-framework - EF Code First 4.1根本不支持nvarchar(max)吗?

转载 作者:行者123 更新时间:2023-12-03 11:47:59 32 4
gpt4 key购买 nike

我在这个问题上花费了相当多的时间,但仍然不知道为什么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)");
}

唯一有效的方法:
public class Post
{
public int Id {get; set;}

[StringLength(4000)]
public string Text {get; set;}
}

问题是,在第一种情况下,我尝试插入任何东西给我: Validation failed for one or more entities,第二种情况不适合我的业务模型。

我是唯一有这个问题的人吗?我该如何处理?

最佳答案

连接到SQL Server数据库时,使用Int32.MaxValue可能会导致一些问题。在属性或api中使用Int32.MaxValue会引发异常,指出“不支持MaxLength大于4000的字符串列”。但是,使用以下任一方法在EF 4.1中对我来说都很好:

您可以使用MaxLengthArritbute,例如

[MaxLength]
public string Text { get; set; }

或像这样的流利的API
 protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<Post>()
.Property(s => s.Text)
.IsMaxLength();
}

要强制使用 ntext,请使用以下之一:
[MaxLength]
[Column(TypeName = "ntext")]
public string Text { get; set; }

或像这样的流利的API
 protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<Post>()
.Property(s => s.Text)
.HasColumnType("ntext")
.IsMaxLength();
}

在这种情况下,您可能不需要 MaxLength属性。

更新(2017年9月6日):

正如Sebazzz在其评论中指出的那样,SQL Server 2016中已弃用了 ntext(和 text)。这是更多信息的链接:

https://docs.microsoft.com/en-us/sql/database-engine/deprecated-database-engine-features-in-sql-server-2016

关于entity-framework - EF Code First 4.1根本不支持nvarchar(max)吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5346155/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com