C#使用实体框架6将JObject播种到数据库

问题描述

上下文: 我正在构建一个Web应用程序(asp .net c#),该应用程序必须使用Entity Framework 6在数据库中存储一些用户提交的翻译。其他翻译是来自服务器上的.json文件的常量,效果很好,所以问题在于一小部分(10%)的应用翻译必须由管理员配置。这种动态用户翻译的一个很好的例子是:另一个用户发布的可翻译博客。

问题: 对我来说,将翻译和博客文章一起存储在数据库中是有意义的。对于博客模型,这可能需要像Dictionary或Json这样的属性(50多种语言)。当我尝试播种JObject(转换为字符串)时,它没有写入数据库。

protected override void Seed(AppDbContext context)
    {
      List<SectionModel> sections = new List<SectionModel>
      {
        new SectionModel() { Test = JObject.FromObject(new { en = "To do" }) },};
    
      context.Sections.AddRange(sections);
    
      context.SaveChanges();
      base.Seed(context);
    }
下次我启动Web应用程序并尝试检索种子数据时,导致此错误:

System.Data.Entity.ModelConfiguration.ModelValidationException:'在模型生成过程中检测到一个或多个验证错误:

App.DBContext.JToken :: EntityType'JToken'没有定义键。定义此EntityType的键。 JTokens:EntityType:EntitySet'JTokens'基于未定义密钥的'JToken'类型。 '

JToken出现了,今天消失了,似乎已经解决了。

我使用的模型如下:

 public class SectionModel
    {
      [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
      public int Id { get; set; }
    
      public string Title { get; set; }
    
      [Column("Test")]
      private string _test;
      [NotMapped]
      public JObject Test
      {
        get
        {
          return JsonConvert.DeserializeObject<JObject>(string.IsNullOrEmpty(_test) ? "{}" : _test);
        }
        set
        {
          _test = value.ToString();
        }
      }
    }

要读取数据库,请使用SQL Server Management Studio。 我本来希望属性Test表现为字符串化的Json,但是没有任何内容写入DB。

问题摘要,使用博客示例: 使用Entity Framework在数据库中为博客模型存储多个翻译字符串的最佳方法是什么? (最好在该博客中使用类似于Dictionary或Json的格式将其保持整洁?)为什么不能像我在示例中尝试的那样将字符串化的JObject放入数据库中?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...