هویت ها (Entity) دارای 2 کلاس برای نگاشت رکورد به جدول هستند. کلاس اول ویژگی ها، فیلدها و متدهای مورد استفاده در نرم افزار تحت وب را تعریف میکند.
موقعیت فایل های سیستمی:[Project Root]\Libraries\Nop.Core\Domain\Catalog\Category.cs Assembly:Nop.Core موقعیت Solution: Nop.Core.Domain.Catalog.Category.cs
کلاس دوم برای نگاشت ویژگی های تعریف شده در کلاس اول روی ستون مربوطه در SQL بکار میرود. کلاس نگاشت همچنین مسئول نگاشت روابط بین جدول های مختلف SQL است.
موقعیت فایل های سیستمی:[Project Root]\Libraries\Nop.Data\Mapping\Catalog\CategoryMap.cs Assembly:Nop.Data موقعیت Solution: Nop.Data.Mapping.Catalog.CategoryMap.cs
مشخصه زیر را به کلاس دسته بندی اضافه کنید.
public string SomeNewProperty { get; set; }
کد زیر را به سازنده کلاس CategoryMap اضافه کنید.
// This code maps a column in the database to the new property we created above
// This creates a nullable nvarchar with a length of 255 characters
// in the Category SQL table
this.Property(m => m.SomeNewProperty).HasMaxLength(255).IsOptional();
چون میخواهیم نتیجه را ببینیم، در این مرحله ما کد را اجرا میکنیم، مجددا دیتابیس را نصب می کنیم و میبینیم ستون موردنظر به درستی ایجاد شده است.
مدل نمایش برای انتقال اطلاعات از کنترلر به نمایش بکار میرود. (بیشتر بخوانید asp.net/mvc). این مدل هدف دیگری نیز دارد: تعریف نیازمندی ها
ما مشخص کرده ایم که دیتابیس ما تنها 255 کاراکتر برای SomeNewProperty در نظر بگیرد. اگر تلاش کنیم که یک SomeNewProperty با 300 کاراکتر داشته باشیم، نرم افزار break میشود. (یا نوشته کوتاه می شود) ما میخواهیم که نرم افزار از بروز خطا برای کاربران به بهترین شکل جلوگیری کند و مدل نمایش ما کمک کند که مجبور به رعایت نیازمندی ها مثل طول رشته باشیم.
موقعیت فایل های سیستمی:[Project Root]\Presentation\Nop.Web\Areas\Admin\Models\Catalog\CategoryModel.cs Assembly:Nop.Admin موقعیت Solution: Nop.Web.Areas.Admin.Models.Catalog.CategoryModel.cs
کلاس اعتبارسنجی برای احراز صلاحیت داده ذخیره شده در درون کلاس مدل بکار می رود. (مثلا فیلدهای موردنیاز، حداکثر طول و بازه های مورد نیاز)
موقعیت فایل های سیستمی:[Project Root]\Presentation\Nop.Web\Areas\Admin\Validators\Catalog\CategoryValidator.cs Assembly:Nop.Web موقعیت Solution: Nop.Web.Areas.Admin.Validators.Catalog.CategoryValidator.cs
افزودن مشخصه به مدل نمایش ما.
// The NopResourceDisplayName provides the "key" used during localization
// Keep an eye out for more about localization in future blogs
[NopResourceDisplayName("Admin.Catalog.Categories.Fields.SomeNewProperty")]
کدهای مورد نیاز به سازنده اعتبارسنج ما افزوده می شود.
//I think this code can speak for itself
RuleFor(m => m.SomeNewProperty).Length(0, 255);
موقعیت فایل های سیستمی:[Project Root]\Presentation\Nop.Web\Administration\Views\Category\ _CreateOrUpdate.cshtml Assembly: Nop.Admin
نمایش ها (views) شامل html برای نمایش دیتای مدل است. این کد html را در زیر بخش active قرار دهید.
For versions 2.00-3.70:
<tr>
<td class="adminTitle">
@Html.NopLabelFor(model => model.SomeNewProperty):
</td>
<td class="adminData">
@Html.EditorFor(model => model.SomeNewProperty)
@Html.ValidationMessageFor(model => model.SomeNewProperty)
</tr>
For versions 3.70-3.90:
<div class="form-group">
<div class="col-md-3">
@Html.NopLabelFor(model => model.SomeNewProperty)
</div>
<div class="col-md-9">
@Html.NopEditorFor(model => model.SomeNewProperty)
For version 4.00 and above:
<nop-label asp-for="" />
<nop-editor asp-for="SomeNewProperty" />
<span asp-validation-for="SomeNewProperty"></span>
در این مورد کنترلر مسئول نگاشت domain data model به مدل نمایش ما و برعکس است. دلیل انتخاب مدل دسته بندی برای بروزرسانی، سادگی آن است. چون در اینجا میخواهیم که پلتفرم ناپ کامرس را معرفی کنیم و علاقه مندیم این خودآموز را تا جای ممکن ساده نگه داریم.
موقعیت فایل های سیستمی:[Project Root]\Presentation\Nop.Web\Areas\Admin\Controllers\CategoryController.cs Assembly:Nop.Admin موقعیت Solution: Nop.Web.Areas.Admin.Controllers.CategoryController.cs
می خواهیم 3 بروزرسانی برای روی کلاس CategoryController داشته باشیم.
عموما علاقه دارم تا برای کدهای زیر تست بنویسم تا مطمئن شوم نگاشت مدل ها بدرستی انجام میشود، اما در اینجا از بخش تست برای سادگی بیشتر صرفنظر میکنم.
در متدهای مناسب (مثل "Create"، "Edit"، یا "PrepareSomeModel") کدهایی را برای تنظیم این مشخصه اضافه میکنیم. در بسیازی از سناریوها این بخش لازم نیست زیرا بطور خودکار توسط AytoMapper موجود در متد .ToModel() مدیریت می شود.
در روش عمومی برای ذخیره هویت معمولا: "Create" or "Edit" methods with [HttpPost] attribute)
// Edit View Model -> Data Model
category.SomeNewProperty = model.SomeNewProperty;
اگر شما میخواهید نرم افزاری موجود را توسعه دهید (با بانک اطلاعاتی موجود) شما می بایست به صورت دستی ستون SomeNewProperty را به جدول Category بیافزایید.
طراحی فروشگاه خود را با امکانات بیشمار و قالب اختصاصی به ما بسپارید. نمونه پروژه های اجرا شده ما را ببینید.
ناپ شاپ با برگزاری دوره های آموزشی در دانشگاهها، ارائه راهنمای فارسی، انجمن گفتگو، فیلم های آموشی، وبلاگ، طراحی انواع پلاگین ها و راه اندازی انواع فروشگاه اینترنتی، در توسعه ناپ کامرس در ایران تلاش میکند.