【发布时间】:2017-11-04 02:15:39
【问题描述】:
我正在试图弄清楚如何处理this doc: 中描述的“单一导航属性案例”
假设我们有 2 个模型。
class School
{
public ICollection<Child> Childrens {get; set;}
...
}
和
class Child
{
public int Id {get; set;}
...
}
所以这是按惯例创建的多对一关系,Child 中没有明确的外键。
所以问题是我们是否有Child 实例并且知道School.Id 是否有办法更新此关系而无需额外调用数据库来获取School 实例。
【问题讨论】:
-
除非您的
Child具有父级的导航属性/父级 ID,否则您不能这样做(即:没有原始查询)。 ORM 是关于对象关系的。但是如果不先加载父级,您甚至不知道7352是否是有效的父级 ID,因此无论如何您都必须在某一时刻执行此操作,否则在执行操作时会从数据库提供程序处获得难以解析的异常SaveChanges() -
不清楚您要实现什么 - 更改现有孩子的父母?
-
@Tseng 对不起,我有点困惑。
7352这只是一个孩子的身份,而不是父母。并且显示学校可以有很多孩子存在多对一的关系。我假设即使事实上我在ChildEF 中没有直接的ParentId仍然为多对一关系隐式创建它。 -
然后是父ID,不管它是什么。仅当
Child具有父级的导航属性或父级的外键时,才可能在单个查询中执行此操作,即ctx.Childs.Add(new Child { ParentId = 5 })和ParentId是m:1 的配置主体(或外键) /1:m 关系,那么你可以 -
@Ph0en1x 但是现有的孩子应该已经有家长学校了吧?你不能仅仅通过
Id来创建一个新孩子。 stub 技术在 EF6 中有效,用于添加指向显式多对多关系的链接,但情况并非如此(并且 EF Core 目前不支持带有隐式链接表的多对多)。
标签: c# orm asp.net-core relationship entity-framework-core