همه با کم و بیش با زبان Sql و پایگاه دادههایی که بر مبنای Structured Query Language آشنا هستیم، در واقع این زبان یک ابزار استاندارد برای استفاده از پایگاه دادههای relational است.
امروزه معروفترین پایگاه دادههایی که ساختار relational دارند و زبان Sql را پشتیبانی میکنند(البته هرکدام با کمی تفاوت و شخصی سازی) میتوان به Microsoft SQL Server, MySQL, Oracel اشاره نمود.
همانطور که قبلا گفته شد، گرچه تمام این پایگاه دادهها بر مبنای زبان SQL هستند ولی جزئیات دستورات و ساختار گاها متفاوت است. به عنوان مثال نحوه صفحه بندی دادهها در Microsoft SQL Server نسخه 2012 به بعد به شکل زیر است:
SELECT * FROM [Posts] ORDER BY (SELECT 0) OFFSET 20 ROWS FETCH NEXT 10 ROWS ONLY
است و در نسخههای قدیمیتر از 2012 به این شکل:
SELECT * FROM ( SELECT *, ROW_NUMBER() OVER (ORDER BY (SELECT 0)) AS [row_num] FROM [Posts] ) WHERE [row_num] BETWEEN 21 AND 30
و سرانجام در MySql به این شکل:
SELECT * FROM `Posts` LIMIT 10 OFFSET 20
همانطور که میبینید، هریک از این پایگاه داده درحالیکه از SQL پشتیبانی میکنند به شکلی متفاوت ساختار دستوری را پیاده کردهاند.
گرچه امروزه اکثر برنامهنویسان از ابزارهای ORM برای ارتباط با پایگاه داده استفاده میکنند، که معروفترین آنها Entity Framework و NHibernate هستند. اما هنوز در برخی سناریوها نیاز به استفاده از Query مستقیم است بخصوص زمانیکه بحث کارایی، سرعت و امنیت در میان باشد.
مهمترین هدف Sqlkata نیز بر همین اساس استوار شده، یعنی ایجاد یک لایه نزدیک به زبان برنامه نویسی C# و تولید Query بنا به نیاز و متناسب با پایگاه داده هدف. در واقع Sqlkata ابزاری برای تولید کوئری است.
این ابزار خاص زبان C# توسعه یافته و کد آن در گیت بصورت Open source موجود است. دستورات مربوط به این ابزار تاحدودی شبیه به Linq و اما بیشتر شبیه به خود Sql هستند. این ابزار علاوه بر تولید کوئری متناسب با پایگاه داده موردنظر امکان اجرای دستورات جهت درج، ویرایش، حذف و نیز انتخاب را دارد. شما میتوانید نتیجه اجرای یک دستور را به اشیاء تعریف شده در قالب یک <IEnumerable<dynamic تبدیل کنید.
همانطور که میدانید IEnumerable یک رابط Generic است و در صورت نیاز شما میتوانید رابط/کلاس هدف جهت تبدیل را مستقیم معرفی کنید مثل:
IEnumerable<dynamic> users = db.Query("Users").Get();
به مرور پستهای بیشتری در مورد Sqlkata خواهم نوشت و به اشتراک خواهم گذاشت.
به امید موفقیت شما!