MongoDB和C#的工作单元我知道MongoDB不应该支持工作单元等。但我认为实现一个只存储意图的存储库会很好(类似于标准),然后将它们提交给数据库。否则,在存储库中的每个方法中,您都必须创建到数据库的连接,然后关闭它。如果我们将与数据库的连接放在某个BaseRepository类中,那么我们将我们的存储库绑定到一个具体的数据库,并且很难测试存储库,测试解析存储库的IoC。在MongoDB中创建会话是个坏主意吗?有没有办法将连接逻辑与存储库分开?这是RobConery的一些代码。在每次请求时始终连接到数据库是个好主意吗?最佳做法是什么?还有一件事。想象一下,我想为一个集合提供一个索引。之前在constructor里面做过,但是用Rob的方法,好像不合逻辑。使用规范;使用Norm.Responses;使用规范。集合;使用规范。Linq;公共类MongoSession{私有字符串_connectionString;publicMongoSession(){//根据需要设置此连接。这留在这里作为示例,但如果需要,您可以_connectionString="mongodb://127.0.0.1/MyDatabase?strict=false";}publicvoidDelete(System.Linq.Expressions.Expressionexpression)whereT:class,new(){//效率不高,NoRM应该以向MongoDB发送单个命令的方式执行此操作。varitems=All().Where(表达式);foreach(项目中的T项目){删除(项目);}}publicvoidDelete(Titem)whereT:class,new(){using(vardb=Mongo.Create(_connectionString)){db.Database.GetCollection().Delete(item);}}publicvoidDeleteAll()whereT:class,new(){using(vardb=Mongo.Create(_connectionString)){db.Database.DropCollection(typeof(T).Name);}}publicTSingle(System.Linq.Expressions.Expressionexpression)whereT:class,new(){Tretval=default(T);使用(vardb=Mongo.Create(_connectionString)){retval=db.GetCollection().AsQueryable().Where(expression).SingleOrDefault();}返回值;}publicIQueryableAll()whereT:class,new(){//不要让这个超过你需要的时间。vardb=Mongo.Create(_connectionString);返回db.GetCollection().AsQueryable();}publicvoidAdd(Titem)whereT:class,new(){using(vardb=Mongo.Create(_connectionString)){db.GetCollection().Insert(item);}}publicvoidAdd(IEnumerableitems)whereT:class,new(){//这比单次插入快多了。使用(vardb=Mongo.Create(_connectionString)){db.GetCollection()。插入(项目);}}publicvoidUpdate(Titem)whereT:class,new(){using(vardb=Mongo.Create(_connectionString)){db.GetCollection().UpdateOne(item,item);}}//如果你需要的话,这只是一些糖。publicTMapReduce(stringmap,stringreduce){Tresult=默认(T);使用(vardb=Mongo.Create(_connectionString)){varmr=db.Database.CreateMapReduce();MapReduceResponseresponse=mr.Execute(newMapReduceOptions(typeof(T).Name){Map=map,Reduce=reduce});MongoCollectioncoll=response.GetCollection();MapReduceResultr=coll.Find().FirstOrDefault();结果=r.Value;}返回结果;}publicvoidDispose(){_server.Dispose();不必太担心打开和关闭连接MongoDBC#驱动程序维护一个内部连接池,因此每次创建新的MongoServer对象时都没有打开和关闭实际连接的开销。您创建一个公开数据逻辑的存储库接口,并构建一个在需要的地方注入的MongoDB实现。这样,MongoDB特定的连接代码从您的应用程序中抽象出来,应用程序只看到IRepository。尝试使用MongoDB实现工作单元类型模式时要小心。与SQLServer不同,您不能在一个事务中征用多个查询,如果一个查询失败,事务可以回滚。有关使用MongoDB、SQLServer和JSON实现的存储库模式的简单示例,请查看NBlog存储代码。它使用AutofacIoC将具体的存储库注入ASP.NETMVC应用程序。如果您对类似于RobConnery和NBlog的存储代码的实现感兴趣,但使用mongodbcsharp驱动程序2.0(即异步),您可以查看:https://github.com/alexandre-spieser/mongodb-generic-repository并且,您可以编写继承自BaseMongoRepository的自定义存储库。以上就是C#学习教程:mongodb和C#工作单位分享的全部内容。如果对大家有用,需要进一步了解C#学习教程,希望大家多加关注——publicinterfaceITestRepository:IBaseMongoRepository{voidDropTestCollection();voidDropTestCollection(字符串分区键);}publicclassTestRepository:BaseMongoRepository,ITestRepository{publicTestRepository(stringconnectionString,stringdatabaseName):base(connectionString,databaseName){}publicvoidDropTestCollection(){MongoDbContext.DropCollectionTpublicDropCollection();(stringpartitionKey){MongoDbContext.DropCollection(partitionKey);}}本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: