I recently face the problem of setting default value for entities when using entity framework.
After some walk around, here is a part of my actual solution.
This is not really the default values of the properties, but the default values of the types of the properties.
Please consider the following class:
using System; using System.Linq; using System.Reflection; namespace AppXYZ.Entities { public static class EntityTools { public static readonly DateTime dtDef = new DateTime(1900, 1, 1, 0, 0, 0); public static void SetDefaults (object o) { Type T = o.GetType(); foreach ( MemberInfo m in T.GetProperties() ) { PropertyInfo P = T.GetProperty(m.Name); switch ( Type.GetTypeCode(P.PropertyType) ) { case TypeCode.String : if ( P.GetValue(o, null) == null ) P.SetValue(o, String.Empty, null); break; case TypeCode.DateTime : if ( (DateTime)P.GetValue(o, null) == DateTime.MinValue ) P.SetValue(o, EntityTools.dtDef, null); break; } } } //T must have a constructor with 0 argument public static T GetNewEntity<T> () { T e; try { e = Activator.CreateInstance<T>(); } catch { e = default(T); } SetDefaults(e); return e; } } }
Since, I discover at least another way: the just on time way
Aucun commentaire:
Enregistrer un commentaire