- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试使用每个层次结构一个表的模式来存储一个表,但我想将其存储为 json,而不是每个派生字段的列。我只是在做 inheritance section 中的示例在 .net Entity Framework 核心文档中:
class MyContext : DbContext
{
public DbSet<Blog> Blogs { get; set; }
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<RssBlog>().HasBaseType<Blog>();
}
}
public class Blog
{
public int BlogId { get; set; }
public string Url { get; set; }
}
public class RssBlog : Blog
{
public string RssUrl { get; set; }
}
这将正常工作并将每个属性存储为一列,如此处的屏幕截图所示:
我想要实现的是将属性存储为 json 列而不是多列。它可能看起来像这样:
| BlogId | Discriminator | json |
|--------|---------------|-----------------------------------------------------------------------------------------------|
| 1 | Blog | {"Url": "http://blogs.msdn.com/dotnet"} |
| 2 | RssBlog | {"Url": "http://blogs.msdn.com/adonet", "RssUrl": "http://blogs.msdn.com/b/adonet/atom.aspx"} |
主要思想是,我想将一种类型的继承对象存储到同一个表中,正如 TPH 模式所允许的那样,但使用一个 json 列而不是多个列。
这是否可以在 EF Core 2.2 中实现?
最佳答案
很快,
没有。
此功能不是 EF 的原生功能,是否会是一个问题。但是......你可以自己做。
您可以为此实体构建自己的存储库。在内部,它使用 EF 作为数据源,您必须自己完成所有映射。您可能必须构建自己的变更跟踪实现才能获得正确的更新功能。
第二种方法可能是在 JSON 字段中打包整个实体,并使用 EF 作为简单的数据源。 然后你可以用这样的东西提取你的实体......:
var data = DbContext.MyPolymorphData
.Select(x => JsonConvert.Deserialize<IPolyEntity>(x.JsonField))
.ToList();
.. 使用 Json.NET 包,它允许将对象类型与对象数据一起存储到 JSON 中,然后分别对其进行反序列化。但是更新后仍然会有 PITA - 更新后您应该将数据序列化回母实体并让 EF 决定是否有任何更改。呃。
无论如何。 将 JSON 打包的实体存储到关系数据库中会强制您保持与实体模型的兼容性。当您更改实体属性时,它将中断,除非您没有以某种方式设法更新数据库中烘焙的所有 JSON .如果可以选择,请避免使用它。
关于entity-framework-core - 如何使用 Entity Framework Core 2 中的每层级表 (TPH) 模式将列持久保存为 json,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55953963/
我有一个表用于存储 TPH 配置中的几个继承实体。这很好用,没有任何问题。我面临的问题是我需要使用附加字段扩展其中一些实体,并希望使用 TPT 将这些新字段存储在它自己的表中。 为了说明一些背景,我会
首先,这些问题很相似但绝对不一样: Can I mix Table per Hierarchy and Table per Type in Entity Framework? - 指的是不同的场景。
您好,我正在使用 TPH 继承来建立类似的可配置项。我的 TPH 模型是: public class baseConfigItem { public int ID {get;
实体 public abstract class Person { public string FirstName { get; set; } public string LastName {
在我的项目中,我使用 Entity Framework core 2.0。下一个代码稍微简化了。有这样的模型: public class Site { public int Id { get;
我有以下数据库模式: 我正在使用 Table-per-Hiearchy (TPH) 继承。案例表的“类型”字段确定案例是电子邮件案例还是推特案例。它们都与 Cases 表是 1:N 关系。 我在 EF
尝试为我正在制作的系统实现一个非常简单的 TPH 设置,1 个基础类,2 个继承类。 但是继承的类都属于同一个实体集,所以在我的 ObjectContext using 循环中,我只能访问基本抽象类。
我有一张 table : Groups - Id - Name - Type 这张表是一组产品、客户或供应商。要对产品进行分组,我需要在类型列中使用“P”,对客户和供应商进行分组,我需要分别使用
我有一个 wpf 应用程序,其中包含一个首先使用实体框架代码制作的数据库。 我有一个类 Shoes.cs 和两个继承自鞋子的类:Canvas.cs 和 Boots.cs 对于映射,我使用了 tph
背景 我正在使用 .NET Framework 3.5 SP1 在 Visual Studio 2008 SP1 中使用 ADO Entity Framework 编写数据访问库。我正在尝试在两个都派
我将 Entity Framework 6.0.2 与现有数据库一起使用,其中标签存储在单个表中,如下所示: Id: int, 主键 TagType:字符串,判断标签的类型,“usertag”或“mo
我收到错误消息;错误 3032:从第 77 行开始映射片段时出现问题:映射条件成员“Company.CompanyTypeId”,其条件不是“IsNull=False”。删除 Company.Comp
我已经使用 THP 实现了具有简单继承的代码优先数据库架构: 而且我需要查询所有类型的所有通知。NotificationUser 表中的 TargetUser 属性是一个关联。我正在尝试执行下一个代码
我使用的数据结构与此类似,其中动物类型由表中的鉴别器列确定: public class Farm { public int Id { get; set; } public virtua
我将实体配置为始终使用属性“DELETED”='N'进行查询。在 EF 6 中,我可以这样做: modelBuilder.Entity().Map(m => m.Requires("DELETED")
我有一个关于 EF6 的问题。假设我有一个如下所示的抽象基类: [Table("Persons")] public abstract class Person { [Key] publ
我是第一次在 C# MVC 中设置 TPH 继承,我对如何将子类值映射到表有点困惑。例如,我的父实体的流畅 map 是使用以下方式声明的: public class ProjectTaskMap :
我想使用 Mapping Properties of an Entity Type to Multiple Tables in the Database (Entity Splitting)同时使用
可能问题的标题不是不言自明的。 我有一个带有 Entity Framework 6 的 ASP.NET MVC5 项目。我首先使用代码,并且我已经为一个实体实现了 TPH 模式。 有一个基本的请求实体
给定以下类结构 public class Parent { public Guid Id { get; public List Children { get;
我是一名优秀的程序员,十分优秀!