linq(update) 更新用 自动赋值方法

**/ /// <summary>
        
/// 同类型数据赋值
        
/// </summary>
        
/// <param name="DataSetter">需要设置值的对象</param>
        
/// <param name="DataGetter">值来源</param> 
        
/// <param name="IsLinqData">是否为linq模式</param>

         public   static   void  SameValueCopier( object  DataSetter,  object  DataGetter, bool  IsLinqData)
        
{

            PropertyInfo[] propertyInfoList 
= DataSetter.GetType().GetProperties();
            
foreach (PropertyInfo propertyInfo in propertyInfoList)
            
{
                
if (propertyInfo.MemberType == MemberTypes.Property)
                
{
                    
string propertyName = propertyInfo.Name;
                    
object value = DataGetter.GetType().GetProperty(propertyName).GetValue(DataGetter, null);
                    
if (IsLinqData)
                    
{
                        
if (!propertyInfo.PropertyType.IsGenericType)
                        
{  
                            DataSetter.GetType().GetProperty(propertyName).SetValue(DataSetter, value, 
null);
                        }

                    }

                    
else
                    
{  
                        DataSetter.GetType().GetProperty(propertyName).SetValue(DataSetter, value, 
null);
                    }

                    
                }

            }

        }



        
/// <summary>
        
/// 同类型数据赋值
        
/// </summary>
        
/// <param name="DataSetter">需要设置值的对象</param>
        
/// <param name="DataGetter">值来源</param> 
        
/// <param name="IsLinqData">是否为linq模式</param>

         public   static   void  DiffValueCopier( object  DataSetter,  object  DataGetter, bool  IsLinqData)
        
{

            PropertyInfo[] propertyInfoSetterList 
= DataSetter.GetType().GetProperties();
            PropertyInfo[] propertyInfoGetterList 
= DataGetter.GetType().GetProperties();

            
foreach (PropertyInfo dataSetterPropertyInfo in propertyInfoSetterList)
            
{
                
if (dataSetterPropertyInfo.MemberType == MemberTypes.Property)
                
{
                    
string dataSetterPropertyName =  dataSetterPropertyInfo.Name;

                    
foreach (PropertyInfo dataGetterPropertyInfo in propertyInfoGetterList)
                    
{
                        
string dataGetterPropertyName = dataGetterPropertyInfo.Name;
                        
object value = DataGetter.GetType().GetProperty(dataGetterPropertyName).GetValue(DataGetter, null);
                        
if (dataSetterPropertyName == dataGetterPropertyName)
                        
{
                            
if (IsLinqData)
                            
{
                                
if (!dataSetterPropertyInfo.PropertyType.IsGenericType)
                                
{
                                    DataSetter.GetType().GetProperty(dataSetterPropertyName).SetValue(DataSetter, value, 
null);
                                    
break;
                                }

                            }

                            
else
                            
{
                                DataSetter.GetType().GetProperty(dataSetterPropertyName).SetValue(DataSetter, value, 
null);
                                
break;
                            }

                        }

                    }
 
                }

            }

        }


            Category newc = new Category { ID = "1", P_ID = "0", Name = "b" };
            Category oldc = db.Category.Where(r => r.ID == "1").First();

            SameValueCopier(oldc, newc);
            db.SubmitChanges();
            kmdc.SubmitChanges();

 

发现更好的解决方法
查询方法时 :context.ObjectTrackingEnabled = false;
其他: context.ObjectTrackingEnabled = true;
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值