C# WinForms ve Mono GTK SQL ve XML Gibi DataSource Tipleri Yazılım ve Sistem Güvenliği

Mongo 2.7 ile C# Hazır Yapılarım

Entity Framework gibi ORM araçlarına alışanlar için NoSQL öğrenmede ve kullanmada en zor gelen kısmı kolaylıklardan faydalanamıyor olmamızdır. Görsel bir diagram NoSQL mantığı gereği kurulmamalıdır çünkü ilişkisel bir veritabanı değildir. Bundan sonraki çalışmalarımda kullanmak üzere hazırladığım temel işlemler sınıfıma ait kodları aşağıda paylaşacağım.

public class noSQL
{
    MongoClient client;
    public IMongoDatabase db;
    string dbName = "veritabanıAdı";
    string collectionName;
    public noSQL(string colName)
    {
        client = new MongoClient();
        db = client.GetDatabase(dbName);
        collectionName = colName;
    }
    
    public bool insert<T>(dynamic doc)
    {
        bool result = false;
        try
        {
            IMongoCollection<T> collection = db.GetCollection<T>(collectionName);
            collection.InsertOne(doc);
            result = true;
        }
        catch { }
        return result;
    }

    public bool update<T>(Expression<Func<T, bool>> find, UpdateDefinition<T> newdoc)
    {
        bool result = false;
        try
        {
            IMongoCollection<T> collection = db.GetCollection<T>(collectionName);
            collection.UpdateOne<T>(find, newdoc);
            result = true;
        }
        catch { }
        return result;
    }

    public bool delete<T>(Expression<Func<T, bool>> find)
    {
        bool result = false;
        try
        {
            IMongoCollection<T> collection = db.GetCollection<T>(collectionName);
            collection.DeleteOne<T>(find);
            result = true;
        }
        catch { }
        return result;
    }

    public List<T> findAll<T>(FilterDefinition<T> filter=null)
    {
        dynamic result = null;
        try
        {
            if (filter == null)
            {
                result = db.GetCollection<T>(collectionName).Find<T>(_ => true).ToList<T>();
            }
            else
            {
                result = db.GetCollection<T>(collectionName).Find<T>(filter).ToList<T>();
            }
            
        }
        catch { }
        

        return result;
    }
}

 

Kolleksiyonlar arasındaki ilişkilendirmenin modeli şu şekilde oluşturulur.

 

using MongoDB.Bson;
using MongoDB.Bson.Serialization.Attributes;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

namespace blabla.Models
{
    public class applications
    {
        [BsonId]
        public ObjectId Id { get; set; }
        [BsonRepresentation(BsonType.ObjectId)] //bir sınıfta 2 object id tanımı hataya sebep olur. Hilesi burada
        public string deptId {get;set;}
        [BsonElement]
        public string Name { get; set; }
        [BsonElement]
        public DateTime Datex { get; set; }
        [BsonElement]
        public bool isActive { get; set; }
        [BsonElement]
        public ICollection<customers> customers { get; set; } //ilişki
    }

    public class customers
    {
        [BsonId]
        public ObjectId Id { get; set; }

    }
}

 

Sorgulamaya örnek vermek gerekirse eğer

//yapıcı
noSQL db = new noSQL("kolleksiyon");

//findAll metodu
var dbresult = db.findAll();

//filtre metodu
var dbresult = db.findAll(Builders<DiskSizeCounts>.Filter.Eq(x=>x.isActive, true));

//insert metodu
var doc= new applications(){name};
db.insert(doc);

//update metodou
db.update(u=>u.Name.Equals("metin"), Builders<applications>.Update.Set(u=>u.isActive, false).Set(u=>u.Datex, Datetime.Now)); //Set ekleyerek aynı koşula bağlı sınırsız update

//delete metodu
db.delete(d=>d.isActive==false);

 

 

2 Comments

  • Durust Vatandas
    20 Kasım 2019 - 11:30 | Permalink

    Milletin kodunu aliyon bari adam gibi referans goster

    https://github.com/

    • meto260
      20 Kasım 2019 - 15:26 | Permalink

      Verilen örneği inceledim. Yazılımcı olmayanların aradaki farkı anlamamasına şaşırmıyorum. Benim yazımdan 1 yıl sonra yayınlanmış olması da başka bir konu tabi. Sırf terbiyesizlik etmek için bir yerlere bir şeyler yazmak şimdiki ergenlerin favorisi olduğundan bunu da sansürlemiyorum. Sonuçta altınıza bez bağlamayı yeni bırakmışsınız bu başarınızdan aldığınız hazzı her yerde yansıtmalısınız.

      Prim yapmak için paylaşılan linki sansürlüyorum reklam istiyorsanız para konuşalım.

  • Bir cevap yazın

    E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir