使用graphdiff和实体框架将关联设置为继承对象的外键

本文关键字:继承 对象 设置 关联 graphdiff 实体 框架 使用 | 更新日期: 2023-09-27 18:28:49

我在更新从另一个类继承的外键的值时遇到问题。我正在实体框架中处理分离的对象,所以我使用graphdiff来处理它

我简化了代码,使其更容易阅读

项目类别:

public class Project
{
    public Guid Id { get; set; }
    public virtual List<Activity> Activities { get; set; }
}

活动类别:

public class Activity
{
    public Guid Id { get; set; }
    public String Name { get; set; }
    public virtual Company Company { get; set; }
}

冲浪活动类别:

public class SurfingActivity : Activity
{
    public String Comment { get; set; }
    public virtual Weather Weather { get; set; }
}

使用graphdiff:的更新上下文

public void UpdateActivity(Project project)
{
    this.UpdateGraph(project, map => map
        .OwnedCollection(p => p.Activities, with => with
            .AssociatedEntity(a => a.Company)
        )
    );
}

我只能在活动中关联公司属性,但不能关联冲浪活动的天气。当我传递SurfingActivity的值时,Id、Name、Company和Comment是否会保存在Activity表和SurfingActivity表中,但不会保存在weather中。有人建议如何解决这个问题,而不必在Project上创建一个包含surfingActivity 列表的新属性吗?

使用graphdiff和实体框架将关联设置为继承对象的外键

我在GraphDiff中询问了andypelzer,但目前不支持。在这种情况下(但如果实体变得更加嵌套,则不会),我的解决方案是将外键属性添加为数据类型,并将数据注释ForeignKey添加到实体的外键中,如下所示:

    public System.Guid? Weather_Id { get; set; }
    [ForeignKey("Weather_Id")]
    public virtual Weather Weather { get; set; }

问题链接:https://github.com/refactorthis/GraphDiff/issues/112