我发现这是从DataContext更新实体的方法
public bool UpdateLead(Lead lead)
{
OrganizationServiceContext context = GetOrgContext();
Lead leadToTrack = getLead(lead.Id, context);
leadToTrack.AccountId.Id = lead.AccountId.Id;
//...
context.UpdateObject(leadToTrack);
context.SaveChanges();
return true;
}
但是我在该实体中有大约200个字段(感谢Microsoft Dynamics CRM)。我是否必须编写200行leadToTrack.Field1 = lead.Field1
或者是否有更简洁的方法?
由于
答案 0 :(得分:4)
你可以使用AutoMapper - 如果你有许多属性,双方基本上都有相同的名字,这对你来说应该很有用。
答案 1 :(得分:2)
您可以附加实体并更改其对象状态条目...
context.Leads.Attach(lead);
ObjectStateEntry entry = context.ObjectStateManager.GetObjectStateEntry(lead);
entry.ChangeState(EntityState.Modified);
context.SaveChanges();
答案 2 :(得分:1)
你可以用反射做到这一点。这是我为此目的编写的类似方法:
public static FMVHistory CloneFMV(FMVHistory F) {
FMVHistory F_Clone = new FMVHistory();
Type typeToClone = F.GetType();
Type[] BadGenericTypes = new Type[] { typeof(EntityCollection<>), typeof(EntityReference<>) };
Type[] BadTypes = new Type[] { typeof(System.Data.EntityKey) };
foreach (PropertyInfo pi in typeToClone.GetProperties().Where(p => p.CanWrite)) {
if (pi.PropertyType.IsGenericType && BadGenericTypes.Contains(pi.PropertyType.GetGenericTypeDefinition())
|| (BadTypes.Contains(pi.PropertyType))
|| (pi.Name.Equals("nameOfYourPrimaryKeyWhichYouDontWantCloned"), StringComparison.CurrentCultureIgnoreCase)))
continue;
pi.SetValue(F_Clone, pi.GetValue(F, null), null);
}
return F_Clone;
}
除了传入一个要克隆的对象之外,您将传入源对象和目标对象,并将值从一个复制到另一个。