[英]How to override entity saving, in EFCore?
我想在我的模型中存储一个对象列表,但我知道 EFCore 不支持。 为了解决这个问题,我在模型上创建了一个私有字符串属性来保存列表中对象的 ID。 我的目的是在恢复时在类的构造函数中填充列表。 我的课如下:
public class Visitor
{
public int ID { get; set; }
private string _DepartmentIds { get; set; }
public List<Department> Departments { get; set; }
public Visitor()
{
if (_DepartmentIds.Length > 0)
{
Departments = JsonConvert.DeserializeObject<List<Department>>(_DepartmentIds);
}
else
{
Departments = new List<Department>();
}
}
}
我有两个问题。 一是 _DepartmentIds 不会被 EFCore 保存/跟踪。 我想是因为它是私人的。 第二个是我需要创建一个方法,该方法将从部门列表中读取 ID,将它们放入 _DepartmentIds 字符串中,但我不知道如何在保存对象时调用此方法。 是否可以覆盖或扩展保存在 EFCore 中的实体模型?
编辑:我正在使用反序列化,而不仅仅是将 ID 与分隔符连接,因为我可能想稍后扩展它。
对于 One:Many 关系,您应该创建一个单独的表并加入它们。 架构应该是这样的:
public class Visitor {
public int ID { get; set; }
public List<Department> Departments { get; set; }
}
public class Department {
public int ID { get; set; }
public int VisitorID { get; set; }
[ForeignKey(nameof(VisitorID))]
public Visitor Visitor { get; set; }
}
如果您不想在Department
拥有Visitor
对象,您还可以使用以下内容通过 fluent API 配置它:
entity.HasOne<Visitor>()
.WithMany()
.HasForeignKey(department => department.VisitorID);
当您在Visitor
上执行查找时,您将能够使用Include
功能来包括所有相关部门。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.