using System;
using System.Reflection;
namespace WalkingTec.Mvvm.Core.Extensions
{
///
/// System Extension
///
public static class SystemExtension
{
#region Guid Extensions
public static string ToNoSplitString(this Guid self)
{
return self.ToString().Replace("-", string.Empty);
}
#endregion
///
/// 将CrudVM中Entity的关联字段设为空并返回一个新的CrudVM
///
///
///
public static object GetCleanCrudVM(this object self)
{
var mtype = self.GetType();
if(typeof(IBaseCRUDVM).IsAssignableFrom(mtype))
{
var rv = mtype.GetConstructor(Type.EmptyTypes).Invoke(null);
var toppros = mtype.GetAllProperties();
foreach (var tpro in toppros)
{
if(tpro.Name == "Entity")
{
var entity = tpro.GetValue(self);
var pros = tpro.PropertyType.GetAllProperties();
var newEntity = tpro.PropertyType.GetConstructor(Type.EmptyTypes).Invoke(null);
bool isBasePoco = typeof(IBasePoco).IsAssignableFrom(tpro.PropertyType);
//将所有TopBasePoco的属性赋空值,防止添加关联的重复内容
foreach (var pro in pros)
{
if (pro.PropertyType.GetTypeInfo().IsSubclassOf(typeof(TopBasePoco)) == false)
{
if (isBasePoco == false || (pro.Name != "UpdateTime" && pro.Name != "UpdateBy"))
{
pro.SetValue(newEntity, pro.GetValue(entity));
}
}
}
tpro.SetValue(rv, newEntity);
}
else
{
if (tpro.CanWrite)
{
tpro.SetValue(rv, tpro.GetValue(self));
}
}
}
return rv;
}
return null;
}
}
}