创建新的父对象时,我需要在两个地方附加一个子对象。我收到错误:
无法确定有效的订购清单和对儿童的单一参考
我的模型看起来像:
public class Child()
{
public int Id { get; set; }
public int ParentId { get; set; }
public string Name { get; set; }
}
public class Parent
{
public int Id { get; set; }
public virtual ICollection<Child> Children { get; set; }
public int FavouriteChildId { get; set; }
public virtual Child FavouriteChild { get; set; }
public void AddChild(string name)
{
var child = new Child { Name = name };
Children.Add(child);
if (Children.Count() == 1)
{
FavouriteChild = child;
}
}
}
我为实体框架配置使用了流畅的映射:
public class ParentMap : EntityTypeConfiguration<Parent>
{
public ParentMap()
{
this.HasRequired(t => t.FavouriteChild)
.WithMany()
.HasForeignKey(d => d.FavouriteChildId);
}
}
public class ChildMap : EntityTypeConfiguration<Child>
{
public ChildMap()
{
this.HasRequired(t => t.Parent)
.WithMany(t => t.Children)
.HasForeignKey(d => d.ParentId );
}
}
插入数据库时,我使用:
// Snipped out a standard EF Database context, repositories, generics, etc.
var newParent = new Parent();
newParent.AddChild("Felix");
newParent.AddChild("Naomi");
var parentSet = context.Set<Parent>();
parentSet.Add(newParent);
context.SaveChanges();
SaveChanges()
抛出上面给出的错误。
我想我的映射设置方式有问题,实体框架无法解决插入Child
的问题。
我不能分两步完成,因为我需要至少有一个Favorite Child(因此FavouriteChildId
整数不可为空)。我还想避免将“收藏夹”的概念移到Child实体(通过添加布尔属性),因为孩子永远不应该知道它是最喜欢的。偏袒是父母的一个方面。
提前致谢。
答案 0 :(得分:1)
我觉得你需要重新设计它。
我们似乎迫使实体陷入Chicken or the Egg困境。
Parent
需要先插入Child
这是因为插入Parent需要FavouriteChildId
。
Child
需要在Parent
之前插入ParentId
,因为需要Parent
插入儿童。
应首先插入哪一个,Child
或<i> ng-show="! showDropdown" </i><i> ng-show="showDropdown" </i>
?