作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在 之间有 1..* 关系点评 和 建议 .
我的模型的相关部分(也是 EF4 映射的 POCO):
public class Review
{
public ICollection<Recommendations> Recommendations { get; set; }
}
ApplyCurrentValues
.但这仅适用于标量属性,不适用于导航属性。
review.Recommendations
是
ICollection<Recommendation>
,所以我不能做
review.Recommendations.Attach
.我也没有使用自我跟踪实体,所以我需要手动处理图形/更改跟踪——直到现在这还不是问题。
ICollection<Recommendation>
):Recommendation
)Recommendation
)ICollection<Recommendation>
):Recommendation
)Recommendation
)Recommendation
)[HttpPost]
public ActionResult Edit(Review review)
{
_service.Update(review); // UserContentService
_unitOfWork.Commit();
}
public void Update<TPost>(TPost post) where TPost : Post, new()
{
_repository.Update(post); // GenericRepository<Post>
}
GenericRepository<Post>
public void Update<T2>(T2 entity) where T2 : class, new()
{
// create stub entity based on entity key, attach to graph.
// override scalar values
CurrentContext.ApplyCurrentValues(CurrentEntitySet, entity);
}
Update
(或
Add
或
Delete
)需要为每个建议调用存储库方法,具体取决于它是新的/修改的/删除的。
最佳答案
我接受了@jfar 的回答,因为他让我走上了正确的轨道,但我想我会在此处添加一个答案以使其他人受益。
关系未更新的原因如下:
1)完全断开的场景。 ASP.NET = 无状态,新的上下文更新了每个 HTTP 请求。
2)由 MVC(模型绑定(bind))创建的编辑实体,但在图中不存在。
3) 当使用没有变更跟踪的 POCO 时,执行 .Attach
在实体上会将其添加到图表中,但实体和任何子关系将为 不变。
4) 我使用 stub 实体技巧和ApplyCurrentValues
更新实体,但这仅适用于标量属性,不适用于导航属性。
所以 - 为了让上述工作,我必须明确设置 EntityState
对于对象(由于 ApplyCurrentValues
而自动发生),还有导航属性。
还有一个问题 - 我该怎么做 了解如果导航属性被添加/修改/删除?我没有可比较的对象 - 只有一个我知道是“编辑”的实体,但我不知道编辑了什么。
所以最终的解决方案是这样的:
[HttpPost]
public ActionResult Edit(Review review)
{
var existingReview = _service.FindById(review.Id); // review is now in graph.
TryUpdateModel(existingReview); // MVC equivalent of "ApplyCurrentValues" - but works for ALL properties - including navigationals
_unitOfWork.Commit(); // save changed
}
_service.Update
方法 - 因为我不再需要 stub 技巧 - 因为评论在检索图中,并且
ApplyCurrentValues
替换为
TryUpdateModel
.
关于asp.net-mvc - ASP.NET MVC/EF4/POCO/Repository - 如何更新关系?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4653834/
我是一名优秀的程序员,十分优秀!