Created
June 8, 2010 03:18
-
-
Save germanviscuso/429559 to your computer and use it in GitHub Desktop.
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 Norm; | |
using Norm.Responses; | |
using Norm.Collections; | |
using Norm.Linq; | |
public class MongoSession { | |
private Mongo _server; | |
MongoQueryProvider _provider; | |
public MongoSession() { | |
//set this connection as you need. This is left here as an example, but you could, if you wanted, | |
//put this in the web/app.config | |
_server = Mongo.Create("mongodb://127.0.0.1/MyDatabase?strict=false"); | |
_provider = MongoQueryProvider.Create(_server.Database); | |
} | |
public void CommitChanges() { | |
//mongo isn't transactional in this way... it's all firehosed | |
} | |
public void Delete<T>(System.Linq.Expressions.Expression<Func<T, bool>> expression) where T : class, new() { | |
var items = All<T>().Where(expression); | |
foreach (T item in items) { | |
Delete(item); | |
} | |
} | |
public void Delete<T>(T item) where T : class, new() { | |
_server.Database.GetCollection<T>().Delete(item); | |
} | |
public void DeleteAll<T>() where T : class, new() { | |
_server.Database.DropCollection(typeof(T).Name); | |
} | |
public T Single<T>(System.Linq.Expressions.Expression<Func<T, bool>> expression) where T : class, new() { | |
return new MongoQuery<T>(_provider).Where(expression).SingleOrDefault(); | |
} | |
public IQueryable<T> All<T>() where T : class, new() { | |
return new MongoQuery<T>(_provider); | |
} | |
public void Add<T>(T item) where T : class, new() { | |
_server.Database.GetCollection<T>().Insert(item); | |
} | |
public void Add<T>(IEnumerable<T> items) where T : class, new() { | |
foreach (T item in items) { | |
Add(item); | |
} | |
} | |
public void Update<T>(T item) where T : class, new() { | |
_server.Database.GetCollection<T>().UpdateOne(item, item); | |
} | |
//this is just some sugar if you need it. | |
public T MapReduce<T>(string map, string reduce) { | |
T result = default(T); | |
var mr = _server.Database.CreateMapReduce(); | |
MapReduceResponse response = | |
mr.Execute(new MapReduceOptions(typeof(T).Name) { | |
Map = map, | |
Reduce = reduce | |
}); | |
MongoCollection<MapReduceResult<T>> coll = response.GetCollection<MapReduceResult<T>>(); | |
MapReduceResult<T> r = coll.Find().FirstOrDefault(); | |
result = r.Value; | |
return result; | |
} | |
public void Dispose() { | |
_server.Dispose(); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment