如何解决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 举报,一经查实,本站将立刻删除。