gpt4 book ai didi

c# - 中文本/长文本 - Entity Framework 代码优先迁移

转载 作者:行者123 更新时间:2023-11-29 10:39:25 25 4
gpt4 key购买 nike

我在我的数据库中使用了 Entity Framework 代码优先迁移,并且在我为数据创建的最新表之一中,我存储了 JSON 数据,在极少数情况下最多可包含 100,000 个字符。我们使用的数据库是MySQL,nvarchar(MAX)不存在,最大长度限制在20,000左右。我想使用 MEDIUMTEXTLONGTEXT 来存储此 Json 数据,但我找不到合适的属性来添加到 string 属性中执行此操作的类。

我尝试过的东西:-

  • [Column(TypeName = "text")]
  • [Column(TypeName = "mediumtext")]
  • [Column(TypeName = "MEXIUMTEXT")]

有趣的是,当我更改以下任一内容时,当迁移运行并生成部分类时:-

AlterColumn("dbo.ApiAiItems", "JsonData", c => c.String(unicode: false, storeType: "text"));

或者...

AlterColumn("dbo.ApiAiItems", "JsonData", c => c.String(unicode: false));

到...

AlterColumn("dbo.ApiAiItems", "JsonData", c => c.String(unicode: false, storeType: "mediumtext"));

在 MySQL 数据库表上设置了正确的数据类型。所以问题是让迁移生成正确的类型。

有人能提出什么建议吗?或者编辑部分 .CS 文件是否可以接受?

提前致谢!

最佳答案

您没有指出您正在使用的 Entity Framework 版本,但我在 OnModelCreating 方法中执行了类似于以下操作的操作,以根据实体属性反射应用 SQL Server 数据类型。类似的东西可能对你有用。我没有现成的 MySQL 实例访问权限来进行测试,因此您的情况可能会有所不同。

    protected override void OnModelCreating(DbModelBuilder modelBuilder) {
...
modelBuilder.Properties<string>()
.Where(p => p.GetCustomAttributes(true).OfType<ColumnAttribute>().Any(a => a.TypeName.ToLowerInvariant() == "mediumtext"))
.Configure(p => p.HasColumnType("mediumtext"));

modelBuilder.Properties<string>()
.Where(p => p.GetCustomAttributes(true).OfType<ColumnAttribute>().Any(a => a.TypeName.ToLowerInvariant() == "longtext"))
.Configure(p => p.HasColumnType("longtext"));
...
}

关于c# - 中文本/长文本 - Entity Framework 代码优先迁移,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45797548/

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