繁体   English   中英

如何在 EFCore 中覆盖实体保存?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM