将现有实体附加到新实体(1-1关系)

时间:2011-09-07 06:20:09

标签: entity-framework-4

将EF4中的关联视为:

儿童1 ---- 0..1父母

因此,在Parent for the Child中有一个不可为空的外键。

我创建了一个新的Parent并分配了一个现有的子项。不幸的是,这是一个有点奇怪的家庭,因为有300个父母,许多人共用同一个孩子。

当我尝试保存300条父记录时,遇到UpdateException:

  

'MyEntities.Parents'中的实体参与'儿童'   关系。找到了0个相关的“孩子”。 1'孩子'是预期的。

以下是一些代码来说明:

// scope autosaves
using (new UnitOfWorkScope(true))
{
    var allParents= (from DataRow dataRow in this.dataTable.Rows
                     where dataRow != null
                     select CreateParent(dataRow)
                     into parents
                     where parents != null 
                     select parents).ToList();

    var parentFacade = new ParentFacade();

    foreach (var newParent in allParents)
    {
        parentFacade.Add(newParent);
    }
}

private static Parent CreateParent(DataRow dataRow)
{
    var parent = new Parent
    {
        SomeProperty = 'Moo',
        Child = GetChild(someValue)
    }

    return Parent;
}

private static Child GetChild(string someValue)
{
    return new ChildFacade().GetChild(someValue);
}

// Facade
public Child GetChild(string someValue)
{
    return (from c in this.ObjectContext.Children
            where c.SomeProperty == someValue
            select c).FirstOrDefault();
}

我无法弄清楚如何绕过它。我想保存一个新的父级,并引用现有的子级。

谢谢,

理查德

1 个答案:

答案 0 :(得分:0)

  

许多人分享同一个孩子。

您的关系不能是1 - 0..1,而是父母一方可以有很多孩子的一对多。您当前的关系表明,Child具有可选Parent,而Parent必须具有Child