我想在模型中存储对象列表,但是我知道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串联起来,因为我以后可能想扩展它。
答案 0 :(得分:0)
对于一个:许多关系,您应该创建一个单独的表并将其联接。模式应类似于:
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; }
}
如果您不想在Visitor
中使用Department
对象,也可以使用以下类似方法通过fluent API对其进行配置:
entity.HasOne<Visitor>()
.WithMany()
.HasForeignKey(department => department.VisitorID);
在Visitor
上执行查找时,您将可以使用Include
函数来包括所有相关部门。