这是从DataContext更新实体的最好方法吗?
本文关键字:方法 实体 DataContext 更新 | 更新日期: 2023-09-27 17:48:59
我发现这是从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)。我要像leadToTrack.Field1 = lead.Field1
那样写200行还是有更简洁的方式?
谢谢
你可以使用AutoMapper——如果你有那么多属性,基本上两边都有相同的名字,这应该很适合你。
您可以附加实体并更改它的对象状态条目…
context.Leads.Attach(lead);
ObjectStateEntry entry = context.ObjectStateManager.GetObjectStateEntry(lead);
entry.ChangeState(EntityState.Modified);
context.SaveChanges();
你可以用反射来做。下面是我为此目的编写的一个类似的方法:
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;
}
除了传入一个要克隆的对象之外,您将传入一个源对象和一个目标对象,并将值从一个复制到另一个