我有一个Recommendation对象和一个FeedbackLevel对象,而FeedbackLevel对象是一个Recommendation对象内的导航属性
建议 int EntityKey; FeedbackLevel Level;
使用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代码成功而没有任何更改!
我还尝试过其他一些方法,例如首先获取现有的建议书,然后在没有任何运气的情况下重新分配反馈级别。
更新
以下是我在保存调用期间从sql profiler捕获的内容:
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。我怎么能让它触发呢?
答案 0 :(得分:0)
不确定你在这里尝试做什么, 但如果您尝试进行更新,那么简单的方法就是
1)通过id执行a,GET [entityName],使用include获取任何子属性
2)更新属性
3)确保实体状态被修改
4)保存更改
首先执行GET,您不需要在更新之前将其附加到上下文,因为它已经在那里。