无需在实体框架中通过父级更新子实体

时间:2015-04-03 07:07:44

标签: c# asp.net-mvc entity-framework ef-code-first

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

父实体

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; }
}

在数据库表YogaSpaceEvent中,它创建一个名为“YogaSpace_YogaSpaceId”的列,该列将外键保存在父亲YogaSpace的id中。

现在,如果我想在这里直接使用新创建的repo将新的YogaSpaceEvent插入到表中。

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

我无权通过c#向“YogaSpace_YogaSpaceId”添加值,因此列值为空。

YogaSpaceEvent表 enter image description here

我必须使用我的父实体'YogaSpace'存储库并获取'YogaSpace',然后添加一个新的'YogaSpaceEvent'。这就像两个步骤和另一个从数据库获取,但它的工作原理。

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

2 个答案:

答案 0 :(得分:1)

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; }
}

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

答案 1 :(得分:0)

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