آشنایی با LocalDB توسط sqlcmd در MVC

چهارشنبه 26 اسفند 1394

در این مقاله نحوه استفاده از Localdb را در یک برنامه ساده شرح خواهیم داد .به همراه نمونه عملی که ضمیمه این مقاله می باشد یک پایگاه داده با Localdb ایجاد کرده و سپس از آن در برنامه خود استفاده می کنیم .

آشنایی با LocalDB توسط sqlcmd در MVC

شاید به نظرتان برسد که LocalDB برای کار کردن کمی سخت و گیج کننده باشد .وقتی برنامه شما کنسول باشد کار با LocalDB واقعا سخت هم هست چون نمی توانید آن را درون برنامه خود قرار دهید و به سادگی SQL با ان کار کنید .در این مقاله قصد داریم از LocalDB در یک برنامه ASP.NET  از نوع mvc استفاده کنیم و خواهید دید که این دو چقدر با هم سازگارند .

برای اینکه برنامه ما تا حد امکان ساده باشد یک مدل به صورت زیر داریم .

namespace LocalDB.Models
{
    using System;
    using System.Collections.Generic;
    
    public partial class Table
    {
        public int Id { get; set; }
        public string message { get; set; }
    }
}

بعد از اینکه مدل ما تعیین شد باید دیتامدل خود را که قرار است نقش بانک اطلاعاتی را برای ما بازی کند هم ایجاد کنیم

 

public partial class DB116wEntities : DbContext
    {
        public DB116wEntities()
            : base("name=DB116wEntities")
        {
        }
    
        protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
            throw new UnintentionalCodeFirstException();
        }
    
        public virtual DbSet<Table> Table { get; set; }
    }

همان طور که میدانید دیتامدل ابزار Entity Framework برای کار کردن راحت تر با دیتابیس است .در این حالت جداول و دیتابیس ما مانند شی در داخل برنامه خواهند بود .

لایه دیتا

در این لایه قصد داریم که از repository استفاده کنیم .

public interface ISecretRepository : IDisposable
{
    Task<Secret> GetSecret();
}

بعد ازاین قصد داریم که برای لایه داده خود یک UnitTest  بنویسیم .البته برای بحث ما که LocalDB است UnitTest کمی دور از بحث است .به هر حال نحوه ای که برای برنامه Unit test نوشته ایم مانند زیر است

[TestMethod, TestCategory("Integration")]
public async Task Repository_SecretGetSecretMessage()
{
    Database.SetInitializer(new ApplicationDatabaseInitialize());
    var context = new ApplicationDbContext();
    var repo = new SecretRepository(context);
    var result await repo.GetSecret();
    Assert.IsNotNull(result.Message);
}

اگر برنامه را در همین مرحله اجرا کنید تستی که نوشته بودیم با موفقیت انجام می شود

کنترلر

در اینجا در داخل یک کنترلر از نوع Empty یک اکشن می نویسی که یک پیامی را بر می گرداند

  

public class homeController : Controller
    {
        private DB116wEntities db = new DB116wEntities();
        // GET: home
        public ActionResult Index()
        {
            var list = db.Table.Add(new Table()
            {
                message = "در این برنامه از LocalDB استفاده کرده ایم "
            });
            return View(list);
        }
   

برای تست این کنترلر هم کد زیر را می نویسیم

public async Task<ActionResult> Index()
{
    var secret = await _secretRepository.GetSecret();
    return Content(secret.Message);
}

مدیریت LocalDB

در داخل command کدهای زیر را می نویسیم تا دیتابیس خود را ایجاد می کنیم .شانسی که داریم این است که برای ایجاد این دیتابیس نیازی به مسیردهی (که کار سختی بود ) نداریم .

> sqllocaldb i
MSSQLLocalDB
> sqllocaldb s MSSQLLocalDB
LocalDB instance "MSSQLLocalDB" started.

Flag i تمامی Instance های ما را لیست می کند .در داخل ویژوال استودیو 2015 می توانید آخرین ورژن MSSQLLocalDB را داشته باشید .این ورژن یک نسخه سبک از SQL Server 2014 است .معنی کاراکتر s در کد بالا self evident است .
کار با sqlcmd

برای کار با یک نمونه عملی کدهای زیر را در داخل command تایپ کنید

sqlcmd -S (localdb)\MSSQLLocalDB
1> select left(name, 60) from sys.databases;
2> go

با این کار لیستی از دیتابیس های موجود برای شما لیست خواهد شد .در این لیست دیتابیسی که ایجاد کرده بودیم هم وجود دارد .ولی نام آن کمی طولانی است با کد زیر نام دیتابیس را عوض می کنیم.

> alter database DEMYSTIFYLOCALDBSQLCMD_474f4506f19b41eeb89418cfd78da823
     modify name = 'DemystifyLocalDbSqlcmd';
2> go

برای فعال کردن دیتابیس خود کدهای زیر را می نویسیم

1> use DemystifyLocalDbSqlcmd;
2> select left(table_name, 15) from information_schema.tables;
3> go

1> select left(column_name, 15), left(data_type, 15)
     from information_schema.columns where table_name = 'Secrets';
2> go

1> select Id, Message from Secrets;
2> go

مانند Sql server 2014  در این نسخه هم information_schema اطلاعات schema را نمایش می دهد . با وجود sqlcmd می توانید به تمام امکانات sql در داخل LocalDB دسترسی داشته باشید .

نتیجه گیری

LocalDB و sqlcmd دو ابزار قدرتمندی هستند که برای کار حول و حوش T-SQL طراحی شده اند .در هنگام نصب ویژوال می توانید همراه آن تمام این موارد را نیز نصب کنید .البته این تنها راه نیست .برای نصب LocalDB و sqlcmd می توانید فایل های نصبی آنها را هم از اینترنت گرفته و نصب کنید .

LocalDB یک نسخه جدید از Sql server express است که با وجود آن نیازی به نصب نسخه کامل aql ندارید بلکه با همین نسخه LocaDB کار شما راه می افتد.مزایای بسیاری برای LocalDB می توان برشمرد که یکی از مهمترین آنها این است  که کاربر دسترسی به محیط مدیریتی و ویژوال که راحت است ندارد .انواع داده هایی که در داخل نسخه کامل Sql پشتیبانی می شود در این نسخه هم پشتیبانی می شود .این نسخه از sql دیگر سرویس ندارد بلکه هر وقت آنها را اجرا کنیم در حالت Run هستند و وقتی اجرا نکنیم در حالت توقف هستند .

به صورت خلاصه باید ذکر کرد که یک برنامه mvc ایجاد کردیم سپس در داخل Localdb یک دیتابیس بسیار ساده که تنها یک جدول با دو فیلد id و  message دارد ساختیم .این دیتابیس را از طریق Entity Framework به برنامه خود اضافه کردیم .بعد از این با ساخت یک کنترلرکار را ادامه دادیم .

بعد از اجرای برنامه شکل زیر را خواهیم دید

بر روی سیستم خود Sql دارید و به همراه آن LocalDB را هم نصب کرده اید می توانید از طریق کنسول ورود به Management Studio در داخل sql به برنامه LocalDB هم متصل شوید .به عنوان نام سرور عبارت local\v11.0 را وارد نمایید .

فایل های ضمیمه

برنامه نویسان

نویسنده 3355 مقاله در برنامه نویسان

کاربرانی که از نویسنده این مقاله تشکر کرده اند

در صورتی که در رابطه با این مقاله سوالی دارید، در تاپیک های انجمن مطرح کنید