Repository-Muster mit MongoDB: Wo zum initialisieren der Datenbank
Ich habe gerade angefangen zu spielen, um mit MongoDB (C#) und versucht port ein repository, über das von entity framework. Ich bin mit der offiziellen C - # - Treiber 1.0. Jetzt habe ich so etwas wie dieses:
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; } }
}
Ich würde dann gehen Sie auf und implementieren Sie das Repository wie diese:
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...
}
}
Nun würde ich gerne wissen, ob es eine gute Entscheidung zu instanziieren Sie ein "Kontext", wie dies in Bezug auf Leistung. Macht es Sinn um die BsonClass Karten drin?
Vielen Dank für Ihre Eingabe.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich denke, es macht keinen Sinn, sich zu registrieren-Klassen mapping jedes mal, wenn Sie erstellen Sie Ihre repository-Klasse. Da MongoDB C# driver verwaltet die verbindungen zu den MongoDB intern, scheint es mir, dass es besser ist, zu erstellen
MongoServer
- und register-Klassen-mapping nur einmal, beim start der Anwendung und verwenden Sie es dann.Ich bin mit singleton, um
MongoServer
nur einmalSo können Sie auch vor der Klasse in Ihrem Repository:
Instance
da viele dev ' s nicht kennen, IoC, DI-oder scheint es schwer zu undestand 😉NoDefaultPropertyIdConvention
?diese ist auch interessant, wenn Sie verwenden möchten, repository-pattern.