Created
March 14, 2011 22:53
-
-
Save davidwhitney/870037 to your computer and use it in GitHub Desktop.
CouchDb quickstart example
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
using System; | |
using System.Web.Mvc; | |
using Divan; | |
using Newtonsoft.Json; | |
namespace CouchTest.Controllers | |
{ | |
[HandleError] | |
public class HomeController : Controller | |
{ | |
public ActionResult Index() | |
{ | |
const string host = "localhost"; | |
const int port = 5984; | |
var server = new CouchServer(host, port); | |
var db = server.GetDatabase("myfirstdatabase"); | |
var document = new SomeRandomAggregateRoot | |
{This = "Is cool!", Subclass = new SomeRandomClass {IsAwesome = "hell yeah!"}}; | |
using (var couchRepo = new CouchRepository<SomeRandomAggregateRoot>(db)) | |
{ | |
var id = couchRepo.Save(document); | |
var returnedCouchDoc = couchRepo.Retrieve(id); | |
ViewData["Message"] = returnedCouchDoc._id; | |
} | |
return View(); | |
} | |
public ActionResult About() | |
{ | |
return View(); | |
} | |
} | |
public class CouchRepository<T> : CouchRepository where T : CouchAggregateRoot | |
{ | |
public CouchRepository(ICouchDatabase couchDatabase):base(couchDatabase) | |
{ | |
} | |
public T Retrieve(string id) | |
{ | |
return Retrieve<T>(id); | |
} | |
public string Save(T @object) | |
{ | |
return Save<T>(@object); | |
} | |
} | |
public class CouchRepository: IDisposable | |
{ | |
protected readonly ICouchDatabase CouchDatabase; | |
public CouchRepository(ICouchDatabase couchDatabase) | |
{ | |
CouchDatabase = couchDatabase; | |
} | |
public string Save<T>(T @object) where T : CouchAggregateRoot | |
{ | |
var couchDocument = new CouchDocumentWrapper<T>(@object); | |
CouchDatabase.SaveDocument(couchDocument); | |
return couchDocument.Id; | |
} | |
public T Retrieve<T>(string id) where T : CouchAggregateRoot | |
{ | |
var rawDocument = CouchDatabase.GetDocument(id); | |
var @object = JsonConvert.DeserializeObject<T>(rawDocument.ToString()); | |
@object._id = rawDocument.Id; | |
@object._rev = rawDocument.Rev; | |
return @object; | |
} | |
public void Dispose() | |
{ | |
// Should probably get round to implementing this... | |
} | |
} | |
public class CouchAggregateRoot : ICouchAggregateRoot | |
{ | |
public string _id { get; set; } | |
public string _rev { get; set; } | |
} | |
public interface ICouchAggregateRoot | |
{ | |
string _id { get; set; } | |
string _rev { get; set; } | |
} | |
public class SomeRandomAggregateRoot : CouchAggregateRoot | |
{ | |
public string This { get; set; } | |
public SomeRandomClass Subclass { get; set; } | |
} | |
public class SomeRandomClass | |
{ | |
public string IsAwesome { get; set; } | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment