-
-
Save pocheptsov/718955 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 string _connectionString; | |
public MongoSession() { | |
//set this connection as you need. This is left here as an example, but you could, if you wanted, | |
_connectionString = "mongodb://127.0.0.1/MyDatabase?strict=false"; | |
} | |
public void Delete<T>(System.Linq.Expressions.Expression<Func<T, bool>> expression) where T : class, new() { | |
//not efficient, NoRM should do this in a way that sends a single command to MongoDB. | |
var items = All<T>().Where(expression); | |
foreach (T item in items) { | |
Delete(item); | |
} | |
} | |
public void Delete<T>(T item) where T : class, new() { | |
using(var db = Mongo.Create(_connectionString)) | |
{ | |
db.Database.GetCollection<T>().Delete(item); | |
} | |
} | |
public void DeleteAll<T>() where T : class, new() { | |
using(var db = Mongo.Create(_connectionString)) | |
{ | |
db.Database.DropCollection(typeof(T).Name); | |
} | |
} | |
public T Single<T>(System.Linq.Expressions.Expression<Func<T, bool>> expression) where T : class, new() { | |
T retval = default(T); | |
using(var db = Mongo.Create(_connectionString)) | |
{ | |
retval = db.GetCollection<T>().AsQueryable() | |
.Where(expression).SingleOrDefault(); | |
} | |
return retval; | |
} | |
public IQueryable<T> All<T>() where T : class, new() { | |
//don't keep this longer than you need it. | |
var db = Mongo.Create(_connectionString); | |
return db.GetCollection<T>().AsQueryable(); | |
} | |
public void Add<T>(T item) where T : class, new() { | |
using(var db = Mongo.Create(_connectionString)) | |
{ | |
db.GetCollection<T>().Insert(item); | |
} | |
} | |
public void Add<T>(IEnumerable<T> items) where T : class, new() { | |
//this is WAY faster than doing single inserts. | |
using(var db = Mongo.Create(_connectionString)) | |
{ | |
db.GetCollection<T>().Insert(items); | |
} | |
} | |
public void Update<T>(T item) where T : class, new() { | |
using(var db = Mongo.Create(_connectionString)) | |
{ | |
db.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); | |
using(var db = Mongo.Create(_connectionString)) | |
{ | |
var mr = db.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; | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment