entity framework 中不通过父实体就无法更新子实体

Can't update child entity without going through parent in entity framework

我正在尝试更新子实体,但在父实体和子实体之间创建了外键关系。我已经为子实体创建了一个存储库,当我尝试在不先拉出父实体的情况下将子实体插入数据库时​​,外键列为空。这是我的场景。

父实体

public class YogaSpace
{
    public int YogaSpaceId { get; set; }
    //other members here
    public virtual ICollection<YogaSpaceEvent> Events { get; set; }
}

子实体

public class YogaSpaceEvent
{
    public int YogaSpaceEventId { get; set; }
    public string Title { get; set; }
    public DateTime DateTimeScheduled { get; set; }
    public int AppointmentLength { get; set; }
    public int StatusEnum { get; set; }
}

在数据库 table YogaSpaceEvent 中,它创建了一个名为 'YogaSpace_YogaSpaceId' 的列,其中包含父 YogaSpace 的 id 的外键。

现在,如果我想直接使用此处新创建的存储库将新的 YogaSpaceEvent 插入 table。

//calling yogaspaceeventrepo to insert directly into child entity table
yogaSpaceEventRepository.Add(Convert.ToInt16(id), title, dateWithTime, Convert.ToInt16(duration));
yogaSpaceEventRepository.Save();

我无权通过 C# 向 'YogaSpace_YogaSpaceId' 添加值,因此列值为空。

瑜伽空间活动table

我必须去使用我的父实体 'YogaSpace' 存储库并获取一个 'YogaSpace',然后向其中添加一个新的 'YogaSpaceEvent'。这就像多了两个步骤和另一个从数据库中获取但它有效。

是否有另一种方法可以将 'YogaSpaceEvent' 直接插入 table 而无需通过父实体 'YogaSpace'?即使存在外键关系,是否还有另一种方法可以使用代码优先属性来执行此操作?

您可以将YogaSpace_YogaSpaceId 属性 添加到YogaSpaceEvent 以便您可以直接操作父Id。如果不映射外键,您将必须获取父实体。

public class YogaSpaceEvent
{
public int YogaSpaceEventId { get; set; }

public int YogaSpaceID { get; set;}
[ForeignKey("YogaSpaceID")]
public virtual YogaSpace YogaSpace {get; set;}

public string Title { get; set; }
public DateTime DateTimeScheduled { get; set; }
public int AppointmentLength { get; set; }
public int StatusEnum { get; set; }
}

为父对象添加一个新的 属性,为父对象添加另一个 属性。将父对象标记为虚拟并设置外键属性