- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我的应用程序中有一个名为 Person 的实体。有两种类型的用户,Student 和 Professor,继承自 Person。
每个人都有一个设置属性:
public abstract class Person
{
public Guid UserId { get; set; }
public string Name { get; set; }
public PersonSettings Settings { get; set; }
}
public class Student : Person
{
}
public class Professor : Person
{
}
我的 PersonSettings 类只有几个属性。它不是要存储在数据库中的实体,因此我将其标记为 Owned:
[Owned]
public class PersonSettings
{
public bool NotificationsEnabled { get; set; }
public int GymPassId { get; set; }
}
这些作为 json 存储在数据库中,我在我的 Person 实体配置中使用 EF Core 转换值来序列化和反序列化它:
builder.Property(p => p.Settings).HasConversion(
s => JsonConvert.SerializeObject(s, new JsonSerializerSettings { NullValueHandling = NullValueHandling.Ignore }),
s => JsonConvert.DeserializeObject<PersonSettings>(s, new JsonSerializerSettings { NullValueHandling = NullValueHandling.Ignore }));
但是当我尝试运行我的应用程序并进行数据库迁移时,我收到一条错误消息
The owned entity type 'PersonSettings' requires to be referenced from another entity type via a navigation. Add a navigation to an entity type that points at 'PersonSettings'.
我应该在这里做什么?我在错误消息中找不到任何内容。不确定这是否与 Person 是一个抽象类有关。
最佳答案
我也无法复制,但您在这里不需要拥有类型。
使用自有类型是使用非标量属性的 JSON 序列化的替代方法。使用自有类型时,类型与引用它的实体一起存储。因此,自有类型 EF 将创建 Person 表,其中包含用于 Settings_NotificationEnabled 和 Settings_GymPassId 的单独列。
因此您可以简单地删除 OwnedAttribute,并确保您没有将其声明为具有 DbSet<PersonSettings>
类型属性的实体。在你的 DbContext 中。
至于选择哪个,我通常会在这种情况下使用自有类型,因此您可以通过各个 PersonSettings 属性查询数据库。
使用非标量属性的 JSON 转换对于您拥有集合的情况非常有用,因为 EF Core 目前不支持拥有类型的集合。
关于c# - "The owned entity type requires to be referenced from another entity type via a navigation",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51678433/
我是一名优秀的程序员,十分优秀!