JBe*_*ton 3 mongodb mongodb-.net-driver
刚进入NoSQL的东西,请原谅我,如果这是一个简单的问题.我正在尝试使用通用存储库为更常见的操作实现存储库类型模式.
我遇到的一件事是杀死这个想法是为了获得你计划使用的集合,你必须传递一个字符串值作为集合的名称.
var collection = database.GetCollection<Entity>("entities");
Run Code Online (Sandbox Code Playgroud)
这意味着我必须对我的集合名称进行硬编码或在某处编写字典以充当查找,以便我可以将对象类型映射到集合名称.
别人怎么处理这个?
我写了一个类来管理数据库事务
首先,您需要所有实体的基类:
public abstract class Entity
{
public ObjectId Id { set; get; }
}
Run Code Online (Sandbox Code Playgroud)
然后是一个静态类来管理所有:
public static class MongoDB
{
private static string connectionString = "mongodb://localhost";
public static string DatabaseName { get { return "test"; } }
private static MongoServer _server;
private static MongoDatabase _database;
public static MongoServer Server
{
get
{
if (_server == null)
{
var client = new MongoClient(connectionString);
_server = client.GetServer();
}
return _server;
}
}
public static MongoDatabase DB
{
get
{
if(_database == null)
_database = Server.GetDatabase(MongoDB.DatabaseName);
return _database;
}
}
public static MongoCollection<T> GetCollection<T>() where T : Entity
{
return DB.GetCollection<T>(typeof(T).FullName);
}
public static List<T> GetEntityList<T>() where T : Entity
{
var collection = MongoDB.DB.GetCollection<T>(typeof(T).FullName);
return collection.FindAll().ToList<T>();
}
public static void InsertEntity<T>(T entity) where T : Entity
{
GetCollection<T>().Save(entity);
}
}
Run Code Online (Sandbox Code Playgroud)
然后像这样使用它:
public class SomeEntity : Entity { public string Name {set;get;} }
MongoDB.InsertEntity<SomeEntity>(new SomeEntity(){ Name = "ashkan" });
List<SomeEntity> someEntities = MongoDB.GetEntityList<SomeEntity>();
Run Code Online (Sandbox Code Playgroud)
您可以做的是“半硬编码”。您可以将集合的名称放在类名中并引用它:
public class Entity {
public static readonly string Name = "entities";
}
var collection = database.GetCollection<Entity>(Entity.Name);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
13042 次 |
| 最近记录: |