entity framework - How do I Mapout 1D object value into 2D object property value C# EF6 WCF Is there a better or simpler way than what I am doing? -


i using entity framework v6, wcf, , windowsforms: trying map out 1d object value property of collection of myobjectdto makes 3d (maybe 2d) object space (defined rows, columns ) datatables came mind entity framework has entities not tables!

i have array of items[1..n] returned me 3rd party component , each element of array represents property in dto , can 1 or 2000 items.

i trying map items[x] property of given dto in collection keyedlist items[n] has object keyid defined class called keyid 3 properties parent, uniqueid, propertyname - set when instantiated - lifetime (basically long application run out crashing) must remain same!

i have following code not sure if correct approach, long approach or wrong approach. serious experts @ code , tell me if there better way or simpler way this.

// 1 of dto's different dto's  class mydtoobject {     bool property1 {get; set;}    bool property2 {get; set;}    int property3 {get; set;}    string property4 {get; set;}    float property5 {get; set;}    string property6 {get; set;}  }  keyid {  guid parent {get; set;}  guid uniqueid {get; set;}  string propertyname {get; set;} }  keyedlist<mydto> mydtolist keyedlist<mydto>  // itemvalues[] 1 n not same or same items. otherguysobjectschanged(itemvalues[] items) {  for(int i=0; < items.length; i++) {  // object items.keyid     keyid =  (keyid)items[i].keyid;    myinstancedtoobject = mydtolist[keyid.parent];    if(myinstancedtoobject != null)    {     var setvalues  = setvalues[items[i].keyid.propertyname];     setvalues(myinstancedtoobject, items[i].value);     mydtolist[keyid.parent] = myinstancedtoobject;    }  }   // call thread push stuff wcf clients.  // maybe every .250 seconds transform list simple list if need . // call thread entityframework stuff , take list of dto's  // has changed , update db .  }   dictionary<string,action<mydtoobject, object> setvalues = new dictionary<string,action<mydtoobject, object>() {     {"property1", (m,v) => m.property1 = (bool)v.value},     {"property2", (m,v) => m.property2 = (bool)v.value},     {"property3", (m,v) => m.property3 = (int)v.value},     {"property4", (m,v) => m.property4 = (string)v.value},     {"property5", (m,v) => m.property5 = (float)v.value},     {"property6", (m,v) => m.property6 = (string)v.value} ; }   // keyedlist<t> // found ilist implementation on web , modified addition of dictionary  //- hoping able push list wcf client , update datagridview it.   using system; using system.collections.generic; using system.runtime.serialization; using system.text;  namespace utility.collections {     public class keyedlist<t> : ilist<t>     {         internal list<t> _innerlist;          private list<t> innerlist         {                         {                 return _innerlist;             }             set             {                 _innerlist = value;                 oninnerlistchanged(eventargs.empty);             }         }          public event eventhandler innerlistchanged;          /// <summary>         /// inner list changed event         /// </summary>         /// <param name="e"></param>         protected virtual void oninnerlistchanged(eventargs e)         {             var handler = innerlistchanged;             if (handler != null)             {                 handler(this, e);             }          }          private ienumerable<t> _keyedloader;          internal ienumerable<t> keyedloader         {                         {                 return _keyedloader;             }             set             {                 _keyedloader = value;             }         }          [ignoredatamember]         [nonserialized]         private dictionary<object, int> _itemlookup;          [ignoredatamember]         internal dictionary<object, int> itemlookup         {                         {                 return _itemlookup;             }             set             {                 _itemlookup = value;             }         }          /// <summary>         ///          /// </summary>         private void ensurelist()         {             if(innerlist == null)             {                 innerlist = new list<t>(keyedloader);                 //_itemlookup = new dictionary<object, int>();             }             if(itemlookup == null)             {                 _itemlookup = new dictionary<object, int>();             }          }          /// <summary>         ///          /// </summary>         private void refreshdictionary()         {             ensurelist();             (int = 0; < this.itemlookup.count; i++)             {                 itemlookup = new dictionary<object, int>();                 itemlookup[innerlist[i]] = i;             }         }          #region ilist<t> members          public int indexof(t item)         {             ensurelist();             return innerlist.indexof(item);         }          public void insert(int index, t item)         {             ensurelist();             innerlist.insert(index, item);             refreshdictionary();          }          public void removeat(int index)         {             ensurelist();             innerlist.removeat(index);             refreshdictionary();          }          public t this[int index]         {                         {                 ensurelist();                 return innerlist[index];             }             set             {                 ensurelist();                 innerlist[index] = value;                 itemlookup[value] = index;             }         }          /// <summary>         /// ?will throw exception if key not exist!         /// </summary>         public t this[object key]         {                         {                 ensurelist();                 return innerlist[itemlookup[key]];             }             set             {                 ensurelist();                 if (itemlookup.containskey(value))                 {                     innerlist[itemlookup[key]] = value;                 }                 else                 {                      innerlist.add( (t)activator.createinstance( typeof(t) ) );                     itemlookup[key] = innerlist.count-1;                     // throw new argumentoutofrangeexception(string.format("{0}", "key"),                      //  "key not found in dictionary cannot set value");                 }              }          }         #endregion          #region icollection<t> members          public void add(t item)         {             ensurelist();             innerlist.add(item);         }          public void clear()         {             ensurelist();             innerlist.clear();         }          public bool contains(t item)         {             ensurelist();             return innerlist.contains(item);         }          public void copyto(t[] array, int arrayindex)         {             ensurelist();             innerlist.copyto(array, arrayindex);         }          public int count         {             { ensurelist();  return innerlist.count; }         }          public bool isreadonly         {             { return false; }         }          public bool remove(t item)         {             ensurelist();             bool retval = innerlist.remove(item);             refreshdictionary();             return retval;         }          #endregion          #region ienumerable<t> members          public ienumerator<t> getenumerator()         {             ensurelist();             return innerlist.getenumerator();         }          #endregion          #region ienumerable members          system.collections.ienumerator system.collections.ienumerable.getenumerator()         {             ensurelist();             return innerlist.getenumerator();         }          #endregion     } } 

do 2 objects have same properties? if so, recommend use automapper. eliminates manual , tedious mapping dto other models. can install using nuget typing install-package automapper in nuget package manager.


Comments