【发布时间】:2018-03-21 14:49:59
【问题描述】:
我有这门课
public class Parent
{
[Key]
public int Id { get; set; }
public string Name { get; set; }
public virtual Child Child { get; set; }
}
还有一个子类
public class Child
{
[Key]
[ForeignKey]
public int ParentId { get; set; }
public string Name { get; set; }
public virtual Parent Parent { get; set; }
}
这种关系是这样的,父母可以有 0 个或 1 个孩子。我检查了 SO 并找到了两个解决方案。
modelBuilder.Configurations.Add(new ParentChildMap());
// solution 1
class ParentChildMap : EntityTypeConfiguration<Child>
{
public ParentChildMap()
{
HasRequired(t => t.Parent).
WithRequiredDependent(t => t.Child);
}
}
// solution 2
class ParentChildMap : EntityTypeConfiguration<Child>
{
public ParentChildMap()
{
HasOptional(c => c.Parent)
.WithRequired(c => c.Child);
}
}
问题是,它们都在工作!但问题是,我不确定哪一个是正确的。哪一个为我提供了一个父母只能有 0 或 1 个孩子的映射。然后,对方在说什么?
【问题讨论】:
-
这看起来根本不对,实际上。为什么 Child 有对 Parent 的引用?它不应该需要它,除了 ParentId。不应该需要变量。通过查看代码,您似乎想要的是
HasOptional(c => c.Child).WithRequired(c => c.Parent);此外,Child 应该有自己的 Id 作为主键,而 ParentId 应该是外键。 -
您不应该在
Child类中将ParentId作为[Key],您想在Child类和ParentId属性上创建另一个Id属性请改用[ForeignKey]属性。至于你的EntityTypeConfiguration<Child>你想要HasRequired(t => t.Parent) -
我不确定哪个是正确的 -- 方法名称(包含“可选”、“必填”)应该会给你一个强烈的提示。两种解决方案都不正确。
-
omg 谢谢使用
Parent和Child而不是 DMATRFPR 和 DMATRFPR_FUPAFPLS 或者像这个主题的所有其他示例一样的废话。跨度>
标签: c# entity-framework