Empecé a jugar con MongoDB (C#) y traté de transferir un repositorio desde el marco de la entidad. Estoy usando el controlador oficial C# 1.0. Ahora he hecho algo como esto:Patrón de repositorio con MongoDB: dónde inicializar la base de datos
internal class MongoContext
{
public MongoContext(string constring)
{
MongoServer server = MongoServer.Create(constring);
this.myDB = server.GetDatabase("MyDB");
BsonClassMap.RegisterClassMap<VoyageNumber>(cm =>
{ cm.MapField<string>(p => p.Id); });
BsonClassMap.RegisterClassMap<Schedule>(cm =>
{ cm.MapField<DateTime>(p => p.EndDate); cm.MapField<DateTime>(p => p.StartDate); });
BsonClassMap.RegisterClassMap<Voyage>(cm =>
{ cm.MapIdField<VoyageNumber>(p => p.VoyageNumber); cm.MapField<Schedule>(p => p.Schedule); });
}
private MongoDatabase myDB;
public MongoDatabase MyDB
{ get { return this.myDB; } }
}
Me continuación, seguir y poner en práctica el Repositorio de la siguiente manera:
public class MongoVoyageRepository : IVoyageRepository
{
private readonly MongoContext context;
public MongoVoyageRepository(string constring)
{
this.context = new MongoContext(constring);
}
public void Store(Domain.Model.Voyages.Voyage voyage)
{
MongoCollection<Voyage> mongoVoyages = context.MyDB.GetCollection<Voyage>("Voyages");
//store logic...
}
}
Ahora me gustaría saber si es una buena decisión para crear instancias de una "contexto" como este en términos de rendimiento. ¿Tiene sentido poner los mapas BsonClass allí? Gracias por su aporte.
Eso funciona, pero he transformado la propiedad Instancia en un método que acepta una cadena de conexión ya que quiero inyectar la cadena de conexión en el repositorio (IoC). – hoetz
@Malkier: También estoy usando IoC y DI, acabo de hacer 'Instance' ya que muchos desarrolladores no saben sobre IoC, DI o parece difícil de entender;) –
@AndrewOrsich ¿cuál es la clase' NoDefaultPropertyIdConvention'? –