【问题标题】:EF4 POCO - Updating a navigation propertyEF4 POCO - 更新导航属性
【发布时间】:2011-01-03 00:06:00
【问题描述】:

我有一个 Recommendation 对象和一个 FeedbackLevel 对象,FeedbackLevel 对象是 Recommendation 对象内的导航属性

推荐 整数实体键; 反馈级别;

使用 AddObject() 插入一个新的就可以了。这是我正在尝试更新的内容,但它不起作用。

recommendation.Level = myRepository.GetFeedbackLevel(newLevel);
_context.Recommendations.Attach(new Recommendation { EntityKey = recommendation.EntityKey });
_context.Recommendations.ApplyCurrentValues(recommendation);
_context.SaveChanges(System.Data.Objects.SaveOptions.AcceptAllChangesAfterSave);

上面的代码基本上是我所拥有的代码的精简版本。更新标量属性工作得很好,但我无法更新新的导航属性,因为 avove 代码没有任何更改就成功了!

我还尝试了其他一些方法,例如先获取现有推荐,然后将 FeedbackLevel 重新分配给它,但没有任何运气。

更新:

这是我在保存调用期间从 sql 分析器捕获的内容:

exec sp_executesql N'update [dbo].[Recommendation]
set [FeedbackComment] = @0, [LastUpdatedDate] = @1
where ([RecommendationKey] = @2)
',N'@0 varchar(255),@1 datetime,@2 int',@0='This is cool',@1='2010-01-08 10:06:06.5400000',@2=11

看起来它甚至不知道需要保存 FeedbackLevel。我怎样才能让它触发它?

【问题讨论】:

    标签: entity-framework poco entity-framework-4 navigation-properties


    【解决方案1】:

    不知道你到底想在这里做什么, 但如果您尝试进行更新,简单的方法是

    1) 做一个,通过 id 获取 [entityName],使用 include 获取任何子属性

    2) 更新属性

    3) 确保实体状态已修改

    4) 保存更改

    通过首先执行 GET,您无需在更新之前将其附加到上下文中,因为它已经在其中了。

    【讨论】:

      猜你喜欢
      • 2011-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-27
      • 2011-04-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多