【问题标题】:Attaching Existing Entity to New Entity (1-1 Relationship)将现有实体附加到新实体(1-1 关系)
【发布时间】:2011-09-07 06:20:09
【问题描述】:

将 EF4 中的关联视为:

孩子 1----0..1 父母

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

我创建了一个新的父级并分配了一个现有的子级。不幸的是,这是一个有点奇怪的家庭,因为有 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();
}

我不知道如何绕过它。我想保存一个引用现有子代的新父代。

谢谢,

理查德

【问题讨论】:

    标签: entity-framework-4


    【解决方案1】:

    许多共享同一个孩子。

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

    【讨论】:

    • 但是下拉菜单提供单一选择,只能有一个选择,因此只能有一个孩子?那么我需要的是1-1吗?有时,将关系放入数据库中然后再将其收回会更容易:)
    • 知道了。从孩子到父母确实是一对多,然后外键设置好了。找到您关于外国与独立关系主题的博客文章,发现它非常有启发性。保持良好的工作!非常好。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-11
    • 1970-01-01
    • 2013-03-15
    • 1970-01-01
    相关资源
    最近更新 更多