【问题标题】:Creating new Complex Object; EF tries to create new related object rather than associate创建新的复杂对象; EF 尝试创建新的相关对象而不是关联
【发布时间】:2014-03-04 00:55:55
【问题描述】:

这是场景。
示例模型:

public class Foo {
    public int Id {get;set;}
    public virtual Bar Bar {get;set;}
}

public class Bar {
    public int Id {get;set;}
    public string Name {get;set;}
}

在我看来,要创建 Foo 对象,它有一个已存在的 Bar 对象的 DropDownList。
此 DropDownList 的值与 Bar 的 Id 相关。
像这样的:

@Html.DropDownListFor(n => n.Bar.Id, new SelectList(ViewBag.Bars, "Id", "Name"))

提交表单时,MVC 将值正确绑定到 Foo 对象,并创建一个仅设置了 Id 的新 Bar 对象。

当我尝试保存对象时,EF 返回异常。它尝试创建一个 Bar 对象,但会失败,因为 Bar 对象只设置了 Id。
我认为 EF 足够聪明,可以在 Bar 中设置 Id 并获取它。

所以我的问题是:有没有办法通过导航属性设置关系而无需之前获取它?

我的模型的导航属性没有公开的外键,我正在寻找不需要它的解决方案。

【问题讨论】:

    标签: c# asp.net-mvc entity-framework entity-framework-6 asp.net-mvc-5.1


    【解决方案1】:

    EF 需要Foo.BarID 属性来确定如何持久化你的树。没有其他办法。

    【讨论】:

    • 感谢您的回复。我几乎要放弃了,但我仍然认为还有另一种方法可以在不暴露外键的情况下设置它,因为我看到有人在这里发布它作为答案,但我再也找不到它了:(。跨度>
    • 很遗憾没有。在答案中,他们明确表示,如果仅设置了 Id,EF 就可以识别并自动获取导航属性。所以我尝试了,并得到了错误。也许我错了,这真的不可能。我想我会再等一会......
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-13
    相关资源
    最近更新 更多