使用Entity Framework Code First和DBMigration时如何生成ntext / nvarchar列

4
我希望能够使用Fluent API或数据注释来自动生成一个数据库迁移类,以便将字符串列作为ntext而不是固定长度字符串进行处理。我该如何做?
当使用Entity Framework v6、Code First和SQL Server Compact 4时,考虑到一个简单的C#类,例如:
public class GameFile
{
    public string Id { get; set; }        
    public string FileData { get; set; }
    public int FileSize { get; set; }
}

接下来,当添加一个新的迁移时:

add-migration first

生成的迁移类默认为最大长度为4000string列。

CreateTable(
    "dbo.GameFiles",
    c => new
        {
            Id = c.String(nullable: false, maxLength: 4000),
            FileData = c.String(maxLength: 4000),
            FileSize = c.Int()
        })
    .PrimaryKey(t => t.Id);

当数据库通过 update-database 进行更新时,表中将会有一个名为FileData的列,其类型为nvarchar(4000)

我尝试给FileData属性添加一个MaxLength和/或Column特性,但生成的迁移代码没有变化。

[MaxLength, Column(TypeName = "ntext")]
public string FileData { get; set; }

我知道如果手动编辑迁移代码来明确声明 storeType

FileData = c.String(storeType: "ntext")

确保生成的表格被正确创建。


请看这里:https://dev59.com/nG435IYBdhLWcg3wjw3S - Eugene P.
如上所述,这些属性对创建迁移没有任何影响。 - WiredPrairie
我已经能够重现该问题,我将在 Codeplex 上提交一个 Bug。 - ErikEJ
1个回答

4

看起来Entity Framework v6.1.3的错误已经修复。

以下定义按预期工作-创建ntext列。

[Column(TypeName = "ntext")]
public string FileData { get; set; }

提醒一下:在未来的 SQL Server 版本中,ntext、text 和 image 数据类型将被移除。避免在新开发工作中使用这些数据类型,并计划修改当前使用它们的应用程序。改用nvarchar(max)、varchar(max)和varbinary(max)代替。来源:https://learn.microsoft.com/en-us/sql/t-sql/data-types/ntext-text-and-image-transact-sql?view=sql-server-2017 - Tohid

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接