NoSQL mit MongoDB, NoRM und ASP.NET MVC

Ursprünglicher Autor: Shiju Varghese
  • Übersetzung


In diesem Artikel möchte ich erläutern, wie Sie mit NoSQL und der dokumentenorientierten Datenbank MongoDB, NoRM und ASP.NET MVC 2 arbeiten.

NoSQL- und dokumentenorientierte Datenbank


In diesem Jahr sind aktive Bewegungen in Richtung NoSQL besonders bemerkbar und es wird ständig über die Verwendung von dokumentenorientierten Datenbanken zusammen mit Webanwendungen diskutiert. Laut Wikipedia ist „NoSQL eine Bewegung zur Förderung einer freien Klasse nicht relationaler Data Warehouses, die die lange Geschichte relationaler Datenbanken unterbrochen hat. Für Speicherdaten sind möglicherweise keine festen Schemata für Tabellen erforderlich. In den meisten Fällen vermeiden sie Verknüpfungsvorgänge und weisen normalerweise eine horizontale Skalierung auf. Lehrer bezeichnen solche Datenbanken häufig als strukturierte Repositories.

Dokumentorientierte Datenbanken sind schemaunabhängig, sodass Sie sich auf die Problemdomäne konzentrieren und sich nicht um die Aktualisierung des Schemas während der Domänenerweiterungen kümmern müssen. Auf diese Weise können Sie einen echten domänenorientierten Ansatz für die Entwicklung verwenden. Eines der Hauptproblembereiche in relationalen Datenbanken ist die Synchronisation des Datenbankschemas mit Domänenentitäten, wenn sich die Domäne selbst entwickelt. Momentan gibt es eine Vielzahl von Implementierungen des NoSQL-Ansatzes, aber CouchDB und MongoDB haben meine Aufmerksamkeit mehr auf sich gezogen. Als ich die Entwicklung beider Datenbanken beobachtete, stellte ich fest, dass CouchDB keine dynamischen Abfragen ausführen kann, weshalb ich später MongoDB übernahm. Es gibt viele Treiber für .NET für diese Datenbank.

Mongodb


MongoDB ist eine Open Source, erweiterbare, leistungsstarke, schemafreie, dokumentenorientierte Datenbank, die in C ++ geschrieben ist. Entwickelt seit Oktober 2007 von 10gen. MonoDB speichert alle Ihre Daten im binären JSON-Format (BSON). MongoDB zieht mehr Aufmerksamkeit auf sich und ist, wie Sie sehen, im wirklichen Leben weit verbreitet .

NoRM - C # Treiber für MongoDB


NoRM ist ein C # -Treiber für MongoDB, der LINQ unterstützt. NoRM-Projekt ist auf Github verfügbar .

ASP.NET MVC Demo


Ich werde ein einfaches Beispiel mit MongoDB, NoRM und ASP.NET MVC zeigen. Gehen Sie folgendermaßen vor, um mit MongoDB und NoRM zu arbeiten:
  1. Installieren Sie MongoDB für die 32-Bit- oder 64-Bit- Version. Die Archive enthalten mongodb.exe zum Starten des Servers und mongo.exe für den Client.
  2. Laden Sie den NoRM-Treiber für MongoDB herunter
  3. Erstellen Sie ein Verzeichnis mit dem Namen "C: \ data \ db". Dies ist der Standardspeicherort für MongoDB-Datenbanken.
  4. Starten Sie den MongoDB-Server C: \ Mongo \ bin \ mongod.exe.

Jetzt werde ich zeigen, wie eine ASP.NET MVC-Anwendung mit MongoDB und NoRM erstellt wird.

Lassen Sie uns eine Domain-Klasse schreiben.
public class Category
{     
  [MongoIdentifier]
  public ObjectId Id { get; set; }

  [Required(ErrorMessage = "Name Required")]
  [StringLength(25, ErrorMessage = "Must be less than 25 characters")]
  public string Name { get; set;}

  public string Description { get; set; }
}

ObjectId ist der NoRM-Typ, der die MongoDB-ObjectId darstellt. NoRM aktualisiert die ID automatisch, da sie mit dem MongoIdentifier-Attribut ausgestattet ist. Der nächste Schritt ist das Erstellen der MongoSession-Klasse. Es wird jede Interaktion mit MongoDB ausführen.
internal class MongoSession : IDisposable
{
  private readonly MongoQueryProvider provider;

  public MongoSession()
  {
    this.provider = new MongoQueryProvider("Expense");
  }

  public IQueryable Queryable
  {
    get { return new MongoQuery(this.provider); }
  }

  public MongoQueryProvider Provider
  {
    get { return this.provider; }
  }

  public void Add(T item) where T : class, new()
  {
    this.provider.DB.GetCollection().Insert(item);
  }

  public void Dispose()
  {
    this.provider.Server.Dispose();
  }

  public void Delete(T item) where T : class, new()
  {
    this.provider.DB.GetCollection().Delete(item);
  }

  public void Drop()
  {
    this.provider.DB.DropCollection(typeof(T).Name);
  }

  public void Save(T item) where T : class,new()
  {
    this.provider.DB.GetCollection().Save(item);     
  }
}

Der MongoSession-Konstruktor erstellt eine Instanz von MongoQueryProvider, die LINQ-Ausdrücke unterstützt, und erstellt außerdem eine Datenbank mit dem Namen "Expense". Wenn die gleichnamige Datenbank bereits vorhanden ist, wird die vorhandene verwendet. Die Save-Methode kann sowohl für Einfüge- als auch für Aktualisierungsvorgänge verwendet werden. Wenn das Objekt neu ist, wird ein neuer Datensatz erstellt, andernfalls werden die Dokumentdaten mit der übertragenen ObjectId aktualisiert.

Erstellen wir einen ASP.NET MVC-Controller und Aktionsmethoden für das CRUD- Skript für die Category-Domänenklasse.
public class CategoryController : Controller
{

//Index – Получаем список категорий
public ActionResult Index()
{
  using (var session = new MongoSession())
  {
    var categories = session.Queryable.AsEnumerable();
    return View(categories);
  }
}

//Редактируем единственную категорию
[HttpGet]
public ActionResult Edit(ObjectId id)
{
  using (var session = new MongoSession())
  {
    var category = session.Queryable
       .Where(c => c.Id == id)
       .FirstOrDefault();

    return View("Save",category);
  }
}

// GET: /Category/Create
[HttpGet]
public ActionResult Create()
{
  var category = new Category();
  return View("Save", category);
}

//Добавляем или изменяем категорию
[HttpPost]
public ActionResult Save(Category category)
{
  if (!ModelState.IsValid)
  {
    return View("Save", category);
  }
  using (var session = new MongoSession())
  {
    session.Save(category);
    return RedirectToAction("Index");
  }
}

//Удаляем категорию
[HttpPost]
public ActionResult Delete(ObjectId Id)
{
  using (var session = new MongoSession())
  {
    var category = session.Queryable
       .Where(c => c.Id == Id)
       .FirstOrDefault();
    session.Delete(category);
    var categories = session.Queryable.AsEnumerable();
    return PartialView("CategoryList", categories);
  }
}   
}

Wie Sie sehen, können Sie mithilfe von NoRM in ASP.NET MVC-Anwendungen problemlos mit MongoDB arbeiten. Auf CodePlex habe ich ein Repository erstellt, in das Sie den Quellcode dieser ASP.NET MVC-Anwendung herunterladen können .

Jetzt auch beliebt: