此方法用于两个不同类型Entity Framework 对象相同名称属性之间的拷贝
public class EntityHelper
{
/// <summary>
///用","号分隔忽略属性
/// </summary>
/// <param name="source">源对象</param>
/// <param name="target">目标对象</param>
/// <param name="ignorePoperties"></param>
/// <returns></returns>
public static TTarget EntityCopy<TSource, TTarget>(TSource source, TTarget target, string ignorePoperties)
{
List<string> ignoreP = new List<string>();
if (!string.IsNullOrEmpty(ignorePoperties))
{
ignoreP = ignorePoperties.ToLower().Split(',').ToList();
}
ignoreP.Add("entitykey");
ignoreP.Add("entitystate");
var tFields = target.GetType().GetProperties();
var sFields = source.GetType().GetProperties();
foreach (var item in tFields)
{
if (!ignoreP.Contains(item.Name.ToLower()))
{
foreach (var si in sFields)
{
if (si.Name == item.Name)
{
object svalue = si.GetValue(source, null);
object tvalue = item.GetValue(target, null);
if (svalue != null && !svalue.Equals(tvalue))
{
item.SetValue(target, svalue, null);
}
}
}
}
}
return target;
}
/// <summary>
///用","号分隔忽略属性
/// </summary>
/// <param name="source">源对象</param>
/// <param name="target">目标对象</param>
/// <returns></returns>
public static TTarget EntityCopy<TSource, TTarget>(TSource source, TTarget target)
{
return EntityCopy(source, target, "");
}
调用:
/// <summary>
///更新上下级关系
/// </summary>
public int GetChagedPositionRelations()
{
var query = from pr in EISEEntities.View_Interface_PositionReport
join p in EISEEntities.View_Interface_Position on pr.PositionId equals p.PositionId
join dic in EISEEntities.View_Interface_Dictionary on p.DivisionID equals dic.DictionaryId
where DivtionFilt.IndexOf(dic.Code) != -1
&& pr.LastModifiedOn > StartTime
&& pr.LastModifiedOn < EndTime
select new { pr, p.PositionCode };
var list = query.ToList();
foreach (var item in list)
{
ocm_map_PositionRelation_Approval model = new ocm_map_PositionRelation_Approval();
//插入
EntityHelper.EntityCopy(item.pr, model);
model.HRPositionCode = item.PositionCode;
if (item.pr.ParentPositionId != null)
{
model.ParentPositionCode = (from pp in EISEEntities.View_Interface_Position
where pp.PositionId == item.pr.ParentPositionId
select pp.PositionCode).FirstOrDefault();
}
model.PositionRelationApprovalId = Guid.NewGuid();
model.ApprovalStatus = (int)EISSyncApprovalStatus.Stored;
SDMEntities.ocm_map_PositionRelation_Approval.AddObject(model);
}
SDMEntities.SaveChanges(SaveOptions.AcceptAllChangesAfterSave);
return list.Count;
}
表结构: