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; }
}
为父对象添加一个新的 属性,为父对象添加另一个 属性。将父对象标记为虚拟并设置外键属性
我正在尝试更新子实体,但在父实体和子实体之间创建了外键关系。我已经为子实体创建了一个存储库,当我尝试在不先拉出父实体的情况下将子实体插入数据库时,外键列为空。这是我的场景。
父实体
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; }
}
为父对象添加一个新的 属性,为父对象添加另一个 属性。将父对象标记为虚拟并设置外键属性