Dynamic Object to Native Object

 

Dynamic objects in runtime can be converted to native.

 

Note: requires DB with established connection

 

public void DynamicToNative ()

{

   DB db = null;

   try

   {

       const string db_name = "DynamicToNativeTest";

       db = new DB("server=(local);password=;options=none;");

       db.DeleteDatabase(db_name, true);

       db.CreateDatabase(db_name);

       db.OpenDatabase(db_name);

 

       Book book = new Book()

       {

           DbID = 12345,

           Edition = -33,

           Price = 776.32F,

           IBSN = "7748-3782-38768-23343",

           Publisher = "Publisher Mublisher",

           Title = "Title Mitle",

           YearPublished = new DateTime(356, 2, 2),

           Parent = new ParentBook() { Publisher = "Co"}

       };

 

       Dynamic dynObj = new Dynamic(book);

 

       db.Store(dynObj);

 

       Book newBook = dynObj.ToNative<Book>();

 

       Assert.AreEqual(newBook.DbID, (long)dynObj["DbID"]);

       Assert.AreEqual(newBook.Edition, (int)dynObj["Edition"]);

       Assert.AreEqual(newBook.Price, (float)dynObj["Price"]);

       Assert.AreEqual(newBook.IBSN, (string)dynObj["IBSN"]);

       Assert.AreEqual(newBook.Publisher, (string)dynObj["Publisher"]);

       Assert.AreEqual(newBook.Title, (string)dynObj["Title"]);

       Assert.AreEqual(newBook.YearPublished, (DateTime)dynObj["YearPublished"]);

       Assert.AreEqual(newBook.Parent.Publisher, (string)dynObj["Parent"]["Publisher"]);

   }

   finally { db.Close(); }

}

Update existing native object

 

To update existing native object ToNative method can be used. The following example demonstrates this

var @do = new Dynamic();

@do["Name"] = "Frank";

db.Store(@do);

           

//get object back

@do = db.Query<Dynamic>().Where(x => x["Name"] == "Frank").First();

           

//update existing native object “user”

@do.ToNative<MyUser>(user);