• 一个用于 Entity Framework 对象拷贝的方法


    此方法用于两个不同类型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;

    }

    表结构:

  • 相关阅读:
    Visual studio 2008中添加manifest文件
    SqlServer2008R2安装
    今天在Google上搜我的名字,具然埔客园排在第一位。
    今天又到此一游,原因,是为了寻找传说中的Team foundation server,很难找呀,这个东东。
    硬件基础知识
    循环冗余检验应用
    【转】网络变压器的作用
    PADS无模命令总结
    单片机后缀说明
    QuartusII之Warning警告分析
  • 原文地址:https://www.cnblogs.com/Qbit/p/2501053.html
Copyright © 2020-2023  润新知