【发布时间】:2016-10-11 10:30:06
【问题描述】:
假设我需要有两个名为Wagons 和WagonTypes 的表。显然,Wagons 表中的每一行都应该通过外键引用对应的WagonTypes 记录。
我这样做对吗?
public class Wagons
{
public Guid Id { get; set; }
[Required]
public WagonTypes Type { get; set; }
}
public class WagonTypes
{
public Guid Id { get; set; }
[Required]
public string Name { get; set; }
}
是的,它可以工作,但我不明白为什么docs 中有一个额外的字段然后:
public int BlogId { get; set; }
public Blog Blog { get; set; }
拥有BlogId 字段有什么意义?我也应该定义它吗?
【问题讨论】:
-
你的结构看起来不错。它在文档中进行了解释。 Post.Blog 是一个参考导航属性。您不必添加它。
-
来自docs:按照惯例,只有在发现关系但在依赖实体类中找不到外键属性时才会创建影子属性
-
在我看来,您的示例和引用的示例之间存在细微差别:在参考示例中,关系是一个博客与多个帖子的关系(因此帖子可以具有导航属性是有道理的到博客);在您的示例中,反之亦然,Wagon 只能是一个 WagonType,因此您将拥有一个 WagonType 实体并希望返回其父 wagon 是没有意义的(一对多关系是其他方式)。
-
单独指定外键的一个好处是它允许您在不加载整个相关实体的情况下检索外键的值。 (如果您使用延迟加载,这很有用 - 例如
public virtual WagonTypes Type { get; set; }
标签: c# entity-framework ef-code-first asp.net-core