Raven.DynamicSession is a dynamic session allowing you to use RavenDB without the need of POCOs.
The idea came up discussing APIs with prabir in https://jabbr.net and so I decided to see if I could come up with something that achieved what he wanted.
So far I have a working prototype that allows for you to create a Dynamic Session which you can Insert or Load dynamic objects.
using (dynamic session = documentStore.OpenDynamicSession()) { session.Posts.insert(new { Name = "Rabbit" }, "909"); session.Posts.Insert(new { Name = "Banana" }, "123"); session.People.insert(new { FirstName = "Phillip" }, "1"); session.People.Insert(new { FirstName = "Prabir" }, "2"); session.SaveChanges(); }
The above uses the dynamic property 'Posts' or 'people' as the document collection, then invokes a dynamic method which takes a parameter of data. In this case it takes 2 arguments, the object, and the Id. Currently I can't auto insert Ids but that may be possible in the future.
These objects are automatically inserted and it uses the property to set the Raven-Entity-Name to ensure they all end up in their own collections.
using (dynamic session = documentStore.OpenDynamicSession()) { dynamic post1 = session.Posts.load(123); Console.WriteLine(post1.Name); dynamic post2 = session.Posts.Load(909); Console.WriteLine(post2.Name); dynamic person1 = session.People.load(1); Console.WriteLine(person1.FirstName); dynamic person2 = session.People.Load(2); Console.WriteLine(person2.FirstName); }
This code, like the previous code uses the property as the collection, and invokes the Load method from the normal RavenDB session, returning a dynamic type. At the moment it accepts an int for the Id and uses the property to construct the RavenDB document Id like: posts/123
I wouldn't recommend using this for any real world projects... yet, maybe in the future but this is very much a prototype project to see if it's even possible to achieve something like this.
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4