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(); }
}
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);