شروع به کار با MongoDB در ASP.NET Core

MongoDB در ASP.NET Core ، در این مقاله، روند ساخت یک برنامه ی ساده در ASP.NET Core که با پایگاه داده ی MongoDB در ارتباط است را مورد بحث قرار خواهیم داد.

این برنامه عملیات CRUD را بر روی یک پایگاه داده ی Mongo اجرا کرده و سپس جزئیات را در جدولی نمایش می دهد.

اگر بخش های قبلی مقالات ما را نخوانده‏ اید همواره می‏توانید در لینک‏ زیر مشاهده کنید.

ابزارهای واسطه ی مورد استفاده

Robo 3T : یک ابزار واسطه است که ابزاری سبک (کم حجم) جهت مدیریت MongoDBرا فراهم می کند.

پیاده سازی / راه اندازی MongoDB

اگر MongoDB exe را نصب نکرده اید، آن را از MongoDB Download Center دانلود و نصب نمایید.

پس از نصب پایگاه داده، به منظور دسترسی به MongoDB، باید MongoDB Process را آغاز کنیم.

جهت راه اندازی MongoDB exe؛ mongod را در خط فرمان (command prompt) اجرا کنید.

اطمینان حاصل کنید که خط فرمان را از پوشه ی نصبMongoDB اجرا کنید.

بطور پیش فرض، مسیر نصب به این صورت تنظیم شده است :

C:\Program Files\MongoDB\Server\3.6\bin\

علاوه بر آن، نیاز به یک دایرکتوری داده ها جهت ذخیره ی تمامی داده ها در MongoDB داریم.

کاربر می تواند مسیر فایل های داده ها را با استفاده از امکان  dbpath در mongod.exe تنظیم کند.

CommandStart

می توانید پس از راه اندازی process/فرآیند MongoDB، شروع به استفاده از Robo 3T کنید.

برای این پیش نمایش، مجموعه ای با نام Customers با ۳ ستون ایجاد کرده ایم.

Robo3T

از آنجایی که پایگاه داده آماده است، اکنون، ساخت برنامه را آغاز خواهیم کرد.

مقاله را برای ایجاد یک برنامه ی ساده دنبال کنید. در ادامه پیش نمایشی ساده از برنامه ای که قرار است بسازیم آمده است.

demo MongoDB

پروژه ای جدید در Visual Studio ایجاد کنید.

coreproject

قالب ASP.NET Core MVC Web Application را انتخاب کنید.

MongoDB

جهت تعامل با MongoDBاز طریق کد C#، نیاز است NET MongoDB Driver. ، که تعامل ناهمزمان با MongoDBرا فراهم می کند، نصب کنیم.

به طور پیش فرض فرمان های NuGet زیر را برای افزودن درایور به پروژه ی خود بکار بردیم.

Install-Package Microsoft.EntityFrameworkCore.Tools -Version 2.0.1  
Install-Package MongoDB.Driver -Version 2.5.0  

کلاس مدل

بیایید کلاس موجودیتی به نام “Customer” که متناسب با طرح جدول Customers در پایگاه داده است، ایجاد کنیم.

public class Customer  
    {  
        [BsonId]  
        public ObjectId Id { get; set; }  
        [BsonElement]  
        public int CustomerId { get; set; }  
        [BsonElement]  
        public string CustomerName { get; set; }  
        [BsonElement]  
        public string Address { get; set; }  
    } 

این کلاس حاوی ویژگی Id (شناسه) از نوع ObjectId است.

این ویژگی برای تطبیق یک آیتم در مجموعه های MongoDBاستفاده می شود.

ما همچنین یک خاصیت دیگر، به نام BsonElement داریم که جهت نمایش یک “element” (عنصر) در مجموعه ی MongoDB اعمال می شود.

متدهای Controller

در Controller، برای خواندن، تصحیح، ایجاد و حذف رکوردها ازMongoDB،کد اضافه خواهیم کرد.

public class HomeController : Controller  
    {  
        private IMongoDatabase mongoDatabase;  
  
        //Generic method to get the mongodb database details  
        public IMongoDatabase GetMongoDatabase()  
        {  
            var mongoClient = new MongoClient("mongodb://localhost:27017");  
            return mongoClient.GetDatabase("CustomerDB");  
        }  
  
        [HttpGet]  
        public IActionResult Index()  
        {  
            //Get the database connection  
            mongoDatabase = GetMongoDatabase();  
            //fetch the details from CustomerDB and pass into view  
            var result = mongoDatabase.GetCollection<Customer>("Customers").Find(FilterDefinition<Customer>.Empty).ToList();  
            return View(result);  
        }  
  
        [HttpGet]  
        public IActionResult Create()  
        {  
            return View();  
        }  
  
        [HttpPost]  
        public IActionResult Create(Customer customer)  
        {  
            try  
            {  
                //Get the database connection  
                mongoDatabase = GetMongoDatabase();  
                mongoDatabase.GetCollection<Customer>("Customers").InsertOne(customer);  
            }  
            catch (Exception ex)  
            {  
                throw;  
            }  
            return RedirectToAction("Index");  
        }  
  
        [HttpGet]  
        public IActionResult Details(int? id)  
        {  
            if (id == null)  
            {  
                return NotFound();  
            }  
            //Get the database connection  
            mongoDatabase = GetMongoDatabase();  
            //fetch the details from CustomerDB and pass into view  
            Customer customer = mongoDatabase.GetCollection<Customer>("Customers").Find<Customer>(k => k.CustomerId == id).FirstOrDefault();  
            if (customer == null)  
            {  
                return NotFound();  
            }  
            return View(customer);  
        }  
  
        [HttpGet]  
        public IActionResult Delete(int? id)  
        {  
            if (id == null)  
            {  
                return NotFound();  
            }  
            //Get the database connection  
            mongoDatabase = GetMongoDatabase();  
            //fetch the details from CustomerDB and pass into view  
            Customer customer = mongoDatabase.GetCollection<Customer>("Customers").Find<Customer>(k => k.CustomerId == id).FirstOrDefault();  
            if (customer == null)  
            {  
                return NotFound();  
            }  
            return View(customer);  
        }  
  
        [HttpPost]  
        public IActionResult Delete(Customer customer)  
        {  
            try  
            {  
                //Get the database connection  
                mongoDatabase = GetMongoDatabase();  
                //Delete the customer record  
                var result = mongoDatabase.GetCollection<Customer>("Customers").DeleteOne<Customer>(k => k.CustomerId == customer.CustomerId);  
                if (result.IsAcknowledged == false)  
                {  
                    return BadRequest("Unable to Delete Customer " + customer.CustomerId);  
                }  
            }  
            catch (Exception ex)  
            {  
                throw;  
            }  
            return RedirectToAction("Index");  
        }  
  
        [HttpGet]  
        public IActionResult Edit(int? id)  
        {  
            if (id == null)  
            {  
                return NotFound();  
            }  
            //Get the database connection  
            mongoDatabase = GetMongoDatabase();  
            //fetch the details from CustomerDB based on id and pass into view  
            var customer = mongoDatabase.GetCollection<Customer>("Customers").Find<Customer>(k => k.CustomerId == id).FirstOrDefault();  
            if (customer == null)  
            {  
                return NotFound();  
            }  
            return View(customer);  
        }  
  
        [HttpPost]  
        public IActionResult Edit(Customer customer)  
        {  
            try  
            {  
                //Get the database connection  
                mongoDatabase = GetMongoDatabase();  
                //Build the where condition  
                var filter = Builders<Customer>.Filter.Eq("CustomerId", customer.CustomerId);  
                //Build the update statement   
                var updatestatement = Builders<Customer>.Update.Set("CustomerId", customer.CustomerId);  
                updatestatement = updatestatement.Set("CustomerName", customer.CustomerName);  
                updatestatement = updatestatement.Set("Address", customer.Address);  
                //fetch the details from CustomerDB based on id and pass into view  
                var result = mongoDatabase.GetCollection<Customer>("Customers").UpdateOne(filter, updatestatement);  
                if (result.IsAcknowledged == false)  
                {  
                    return BadRequest("Unable to update Customer  " + customer.CustomerName);  
                }  
            }  
            catch (Exception ex)  
            {  
                throw;  
            }  
  
            return RedirectToAction("Index");  
        }  
  
        public IActionResult About()  
        {  
            ViewData["Message"] = "Your application description page.";  
  
            return View();  
        }  
  
        public IActionResult Contact()  
        {  
            ViewData["Message"] = "Your contact page.";  
  
            return View();  
        }  
  
        public IActionResult Error()  
        {  
            return View(new ErrorViewModel { RequestId = Activity.Current?.Id ?? HttpContext.TraceIdentifier });  
        }  
    }

کد برای Viewهای MVC

از آنجایکه این مورد بیشتر در بحث پیش نمایشMongoDB قرار می گیرد، از امکان scaffolding (چارچوب بندی) موجود با MVC جهت تولید View استفاده کرده ایم.

می توانید آن را برحسب نیازهای خود تغییر دهید.

INDEX VIEW

@model IEnumerable<AspNetCoreMVCMongoDBDemo.Models.Customer>  
@{  
    ViewData["Title"] = "Index";  
}  


<h2>Index</h2>


  


  
    <a asp-action="Create">Create New</a>  


  


<table class="table table-bordered" style="width:600px">  
    

<thead>
  
        

<tr>  
            

<th>  
                @Html.DisplayNameFor(model => model.CustomerId)  
            </th>


  
            

<th>  
                @Html.DisplayNameFor(model => model.CustomerName)  
            </th>


  
            

<th>  
                @Html.DisplayNameFor(model => model.Address)  
            </th>


  
            

<th>Actions</th>


  
        </tr>


  
    </thead>


  
    

<tbody>  
        @foreach (var item in Model)  
        {  
            

<tr>  
                

<td>  
                    @Html.DisplayFor(modelItem => item.CustomerId)  
                </td>


  
                

<td>  
                    @Html.DisplayFor(modelItem => item.CustomerName)  
                </td>


  
                

<td>  
                    @Html.DisplayFor(modelItem => item.Address)  
                </td>


  
                

<td>  
                    @Html.ActionLink("Edit", "Edit", new { id = item.CustomerId }) |  
                    @Html.ActionLink("Details", "Details", new { id = item.CustomerId }) |  
                    @Html.ActionLink("Delete", "Delete", new { id = item.CustomerId })  
                </td>


  
            </tr>


  
        }  
    </tbody>


  
</table>


  

CREATE VIEW

@model AspNetCoreMVCMongoDBDemo.Models.Customer  
@{  
    ViewData["Title"] = "Create";  
}  


<h2>Create Customer Details</h2>


  


<hr />


  


<div class="row">
  
    

<div class="col-md-4">
  
        

<form asp-action="Create">
  
            

<div asp-validation-summary="ModelOnly" class="text-danger"></div>


  
            

<div class="form-group">  
                <label asp-for="CustomerId" class="control-label"></label>  
                <input asp-for="CustomerId" class="form-control" />  
                <span asp-validation-for="CustomerId" class="text-danger"></span>  
            </div>


  
            

<div class="form-group">  
                <label asp-for="CustomerName" class="control-label"></label>  
                <input asp-for="CustomerName" class="form-control" />  
                <span asp-validation-for="CustomerName" class="text-danger"></span>  
            </div>


  
            

<div class="form-group">  
                <label asp-for="Address" class="control-label"></label>  
                <input asp-for="Address" class="form-control" />  
                <span asp-validation-for="Address" class="text-danger"></span>  
            </div>


  
            

<div class="form-group">  
                <input type="submit" value="Create" class="btn btn-default" />  
            </div>


  
        </form>


  
    </div>


  
</div>


  


<div>  
    <a asp-action="Index">Back to List</a>  
</div>


  
@section Scripts {  
    @{await Html.RenderPartialAsync("_ValidationScriptsPartial");}  
} 

DELETE VIEW

@model AspNetCoreMVCMongoDBDemo.Models.Customer  
@{  
    Layout = "_Layout";  
}  


<h4>Delete Customer</h4>


  


<div class="row">
  
    

<div class="col-md-4">
  
        

<form asp-action="Delete">
  
            <label class="control-label">Are you sure to delete </label> <input asp-for="CustomerId" class="form-control" readonly />  
            

<div class="form-group">  
                <input type="submit" value="Delete" class="btn btn-default" />  
            </div>


  
        </form>


  
    </div>


  
</div>


  


<div>  
    <a asp-action="Index">Back to List</a>  
</div>


  

DETAILS VIEW

@model AspNetCoreMVCMongoDBDemo.Models.Customer  
@{  
    ViewData["Title"] = "Details";  
}  


<div>
  
    

<h4>Customer Details</h4>


  
    

<hr />


  
    

<dl class="dl-horizontal">  
        

<dt>  
            @Html.DisplayNameFor(model => model.CustomerId)  
        </dt>


  
        

<dd>  
            @Html.DisplayFor(model => model.CustomerId)  
        </dd>


  
        

<dt>  
            @Html.DisplayNameFor(model => model.CustomerName)  
        </dt>


  
        

<dd>  
            @Html.DisplayFor(model => model.CustomerName)  
        </dd>


  
        

<dt>  
            @Html.DisplayNameFor(model => model.Address)  
        </dt>


  
        

<dd>  
            @Html.DisplayFor(model => model.Address)  
        </dd>


  
    </dl>


  
</div>


  


<div>  
  
    <a asp-action="Index">Back to List</a>  
</div>


EDIT VIEW

@model AspNetCoreMVCMongoDBDemo.Models.Customer  
@{  
    Layout = "_Layout";  
}  
@{  
    ViewData["Title"] = "Details";  
}  


<h2>Edit Customer Details</h2>


  


<hr />


  


<div class="row">
  
    

<div class="col-md-4">
  
        

<form asp-action="Edit">
  
            

<div asp-validation-summary="ModelOnly" class="text-danger"></div>


  
            

<div class="form-group">  
                <label asp-for="CustomerId" class="control-label"></label>  
                <input asp-for="CustomerId" class="form-control" />  
            </div>


  
            

<div class="form-group">  
                <label asp-for="CustomerName" class="control-label"></label>  
                <input asp-for="CustomerName" class="form-control" />  
                <span asp-validation-for="CustomerName" class="text-danger"></span>  
            </div>


  
            

<div class="form-group">  
                <label asp-for="Address" class="control-label"></label>  
                <input asp-for="Address" class="form-control" />  
                <span asp-validation-for="Address" class="text-danger"></span>  
            </div>


  
            

<div class="form-group">  
                <input type="submit" value="Save" class="btn btn-default" />  
            </div>


  
        </form>


  
    </div>


  
</div>


  


<div>  
    <a asp-action="Index">Back to List</a>  
</div>


  
  • پسورد: www.mspsoft.com
زهره سلطانیان

نوشته‌های مرتبط

دیدگاه‌ها

*
*

این سایت از اکیسمت برای کاهش هرزنامه استفاده می کند. بیاموزید که چگونه اطلاعات دیدگاه های شما پردازش می‌شوند.