zoukankan      html  css  js  c++  java
  • 一个用于 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;

    }

    表结构:

  • 相关阅读:
    A1117. Eddington Number
    A1116. Come on! Let's C
    A1115. Counting Nodes in a BST
    A1114. Family Property
    A1113. Integer Set Partition
    OC之【NSValue的使用】
    OC之【NSDate使用】
    NSString与int和float的相互转换
    OC之【@protocol协议】
    OC之【深拷贝(mutableCopy)和浅拷贝(copy)】
  • 原文地址:https://www.cnblogs.com/Qbit/p/2501053.html
Copyright © 2011-2022 走看看