【发布时间】:2013-07-26 16:44:07
【问题描述】:
我正在开发一个 EF 5 Code-First 解决方案,我正在尝试使用存储库模式使用修改过的实体来更新现有实体:
public void UpdateValues(T originalEntity, T modifiedEntity)
{
_uow.Context.Entry(originalEntity).CurrentValues.SetValues(modifiedEntity);
我的简化域对象如下所示:
public class PolicyInformation : DomainObject
{
//Non-navigation properties
public string Description {get;set;}
public bool Reinsurance {get;set;}
...
//Navigation properties
LookupListItemFormType FormType {get;set;}
...
}
我遇到的问题是CurrentValues.SetValues(modifiedEntity); 方法似乎只更新标量和复杂类型属性,但不更新导航属性。
我已经看到很多人发生这种情况,但仍然不知道为什么会这样。但是,我发现如果在执行 UpdateValues 后手动设置这些导航属性,一切正常:
_policyInfoRepo.UpdateValues(existingPolicyInfo, info);
existingPolicyInfo.FormType = info.FormType;
问题是,因为我使用的是通用存储库:如何获取域对象中的导航属性列表?也许通过 linq、反射或任何其他方式,以便我的存储库中的更新方法可以循环遍历它们并自动设置它们?
类似这样的:
public void UpdateValues(T originalEntity, T modifiedEntity)
{
//Set non-nav props
_uow.Context.Entry(originalEntity).CurrentValues.SetValues(modifiedEntity);
//Set nav props
var navProps = GetNavigationProperties(originalEntity);
foreach(var navProp in navProps)
{
//Set originalEntity prop value to modifiedEntity value
}
谢谢!
【问题讨论】:
标签: entity-framework c#-4.0 navigation-properties