SQL ve XML Gibi DataSource Tipleri

DynamicLinq Entity Query

Entity framework bize yeterince kısa bir çağrım imkanı sağlayabiliyor. Peki bunu standart isteklerinize göre daha da kısaltabilir misiniz? Cevap evet.

public class CRUD
{
    public static async Task<bool> Insert<T>(T document)
    {
        try
        {
            var db = new myEntities();
            var dbset = db.Set(typeof(T));
            db.Entry(dbset).State = System.Data.Entity.EntityState.Added;
            await db.SaveChangesAsync();
            return true;
        }
        catch (Exception exc)
        {
            SysLogsData.DbError("Db Insert Error", "CRUD/Insert", exc);
            return false;
        }
    }
}
/*
db.Entry(dbset).State = System.Data.Entity.EntityState.Modified;
db.Entry(dbset).State = System.Data.Entity.EntityState.Deleted;
 */

Sorgulama için filtreli ve filtresiz seçenekler yapalım.

 public class myQuery
{
    public static async Task<List<T>> Find<T>(Func<T, bool> lambda)
    {
        var db = new myEntities();
        var dbset = db.Set(typeof(T));
        string query= dbset.Sql;
        var result = db.Database
                    .SqlQuery<T>(query)
                    .Where(lambda)
                    .ToList();
        return result;
    }

    public static async Task<List<T>> Find<T>()
    {
        var db = new myEntities();
        var dbset = db.Set(typeof(T));
        string query = dbset.Sql;
        var result = db.Database
                    .SqlQuery<T>(query)
                    .ToList();
        return result;
    }
}

Linq to SQL kullananlar aşağıdaki örneği kullanabilir.

/// <summary>
/// Veritabanına Tablo Ekleme
/// </summary>
/// <typeparam name="T">Tablonun Modeli veya List<Tablo></typeparam>
/// <param name="document">Eklenecek döküman(lar)</param>
/// <returns></returns>
public static async Task<bool> Insert<T>(T document)
{
    try
    {
        return Task.Run(() => {
            var db = new DataContext();
            var table = db.GetTable(typeof(T));
            if (document.GetType().IsGenericType)
                table.InsertAllOnSubmit(document as List<T>);
            else
                table.InsertOnSubmit(document);

            db.SubmitChanges();
            return true;
        }).Result;
    }
    catch (Exception exc)
    {
        SysLogsData.DbError("Db Insert Error", "/Exec/Insert", exc);
        return false;
    }
}
/// <summary>
/// Veritabanından veri güncelleme
/// </summary>
/// <typeparam name="T">Tablonun Modeli veya List<Tablo></typeparam>
/// <param name="document">Güncellenecek dökümanın güncel hali (halleri)</param>
/// <returns></returns>
public static async Task<bool> Update<T>(T document)
{
    try
    {
        return Task.Run(() => {
            var db = new DataContext();
            var table = db.GetTable(typeof(T));
            db.SubmitChanges();
            return true;
        }).Result;
    }
    catch (Exception exc)
    {
        SysLogsData.DbError("Db Update Error", "/Exec/Update", exc);
        return false;
    }
}
/// <summary>
/// Veritabanından veri silme
/// </summary>
/// <typeparam name="T">Tablonun Modeli veya List<Tablo></typeparam>
/// <param name="document">Silinecek döküman(lar)</param>
/// <returns></returns>
public static async Task<bool> Delete<T>(T document)
{
    try
    {
        return Task.Run(() => {
            var db = new DataContext();
            var table = db.GetTable(typeof(T));
            if (document.GetType().IsGenericType)
                table.DeleteAllOnSubmit(document as List<T>);
            else
                table.DeleteOnSubmit(document);

            db.SubmitChanges();
            return true;
        }).Result;
    }
    catch (Exception exc)
    {
        SysLogsData.DbError("Db Delete Error", "/Exec/Delete", exc);
        return false;
    }
}

public static async Task<int> ExecuteSpecialQuery(string query, params object[] parameters)
{
    try
    {
        return Task.Run(() => {
            var db = new DataContext();
            return db.ExecuteCommand(query);
        }).Result;
    }
    catch (Exception exc)
    {
        SysLogsData.DbError("Db ExecuteQuery Error", "/Exec/ExecuteQuery", exc);
        return 0;
    }
}

Aynı şekilde arama işlemi için

/// <summary>
/// Veritabanında Koşullu Arama
/// </summary>
/// <typeparam name="T">Tablo modeli</typeparam>
/// <param name="lambda">Linq lambda biçiminde koşullar</param>
/// <returns></returns>
public static async Task<List<T>> Find<T>(Func<T, bool> lambda)
{
    return Task.Run(() => {
        var db = new DataContext();
        var table = db.GetTable(typeof(T)); 
        var cmd = db.GetCommand(table.AsQueryable());
        var result = db.ExecuteQuery<T>(cmd.CommandText).Where(lambda).ToList();
        return result;
    }).Result;
}
/// <summary>
/// Veritabanında koşulsuz arama
/// </summary>
/// <typeparam name="T">Tablo modeli</typeparam>
/// <returns></returns>
public static async Task<List<T>> Find<T>()
{
    return Task.Run(() => {
        var db = new DataContext();
        var table = db.GetTable(typeof(T));
        var cmd = db.GetCommand(table.AsQueryable());
        var result = db.ExecuteQuery<T>(cmd.CommandText).ToList();
        return result;
    }).Result;
}

Bir cevap yazın

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