2015-04-03 86 views
0

我试图更新子实体,但在父级和子级之间创建了外键关系。我为子实体创建了一个存储库,当我尝试在没有首先拉动父项的情况下将子项插入数据库时​​,外键列是空的。这是我的场景。无法通过实体框架中的父级更新子实体

父实体数据库表

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列。

所以,现在如果我想在这里直接使用新创建的回购在表中插入新的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'?有没有另一种方法可以使用代码优先属性来执行此操作,即使存在外键关系?

回答

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

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

0

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

+0

请您举例说明一下吗?我不能只是添加一个新的属性到YogaSPaceEvent,它会创建一个新的列。 – user1186050 2015-04-03 07:42:15