עדכון ישות קיימת. כיצד להוסיף תכונה (property) חדשה

מדריך זה בא להסביר כיצד להוסיף תכונה לישות Affiliate המגיעה עם קוד המקור של nopCommerce.

מודל ה- data

לישויות יש שתי מחלקות המשמשות למיפוי רשומות לטבלה. המחלקה הראשונה מגדירה את התכונות, השדות והמתודות שהאפליקציה משתמשת בהם.


File System Location:
[Project Root]\Libraries\Nop.Core\Domain\Affiliates\Affiliate.cs
Assembly: Nop.Core
Solution Location: Nop.Core.Domain.Affiliates.Affilate.cs

המחלקה השניה משמשת למיפוי התכונות המוגדרות ע"י המחלקה הראשונה לעמודות ה-SQL המתאימות. מחלקת המיפוי אחראית גם על מיפוי היחסים בין טבלאות ה-SQL השונות.

File System Location:
[Project Root]\Libraries\Nop.Data\Mapping\Affiliates\AffiliateMap.cs
Assembly: Nop.Data
Solution Location: Nop.Data.Mapping.Affiliates.AffiliateMap.cs

 

הוסף את התכונה הבאה למחלקת Affiliate

// Instance members must be virtual on data table objects like Affiliate.cs

// Virtual is required by data access frameworks so that these frameworks

// can implement more complex features like lazy loading.

public virtual string AffiliateWebSite { get; set; }

הוסף את הקוד הבא ל-constructor של מחלקת AffiliateMap.

// 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 Affiliate SQL table

this.Property(m => m.AffiliateWebSite).HasMaxLength(255).IsOptional();

 

בשלב זה כדאי להריץ את הקוד, להתקין מחדש את בסיס הנתונים ולוודא כי העמודה נוצרה כראוי.

מודל ה- presentation

מודל זה משמש להעברת מידע מהבקר (controller) ל- view (קרא עוד ב-asp.net/mvc ). למודלים תפקיד נוסף – הגדרת דרישות.

הגדרנו את בסיס הנתונים שלנו לאחסן רק 255 תוים עבור AffiliateWebSite. אם ננסה לשמור AffiliateWebSite עם 300 תוים, האפליקציה תישבר (או שהטקסט ייחתך). אנו רוצים שהאפליקציה תשמור מפני טעויות משתמשים כמיטב יכולתנו ומודלי ה- viewעוזרים לאכוף את דרישות כגון אורך מחרוזת.

File System Location: [Project Root]\Presentation\Nop.Web\Administration\Models\Affiliates\AffiliateModel.cs
Assembly: Nop.Admin
Solution Location: Nop.Admin.Models.Affiliates.AffiliateModel.cs

מחלקת ה-validator משמשת לאימות המידע המאוחסן בתוך מחלקת המודל (למשל, שדות חובה, אורך מרבי, טווחים נדרשים).

File System Location: [Project Root]\Presentation\Nop.Web\Administration\Validators\Affiliates\AffiliateValidator.cs
Assembly: Nop.Admin
Solution Location: Nop.Admin.Validators.Affiliates.AffiliateValidator.cs

 

הוסף את התכונה למודל ה- view שלנו .

NopResourceDisplayName מספק "מפתח" בו שימוש במהלך לוקליזציה//

יש לפקוח עין יותר על לוקליזציה בבלוגים עתידיים//

[NopResourceDisplayName("Admin.Affiliates.Fields.AffiliateWebSite")]

public string AffiliateWebSite { get; set; }

קוד הדרישות יתווסף ל- constructorשל ה- validator.

// אני חושב הקוד הזה יכול לדבר בעד עצמו

RuleFor(m => m.AffiliateWebSite).Length(0, 255);

 

ה- view

File System Location: [Project Root]\Presentation\Nop.Web\Administration\Views\Affiliates\ _CreateOrUpdate.cshtml
Assembly: Nop.Admin
Solution Location: Nop.Admin.Views.Affiliates._CreateOrUpdate.cshtml

Views מכילים html להצגת מודל data. הכנס את ה- htmlהבא בקטע ה-"active"

<tr>

<td class="adminTitle">

@Html.NopLabelFor(model => model.AffiliateWebSite):

</td>

<td class="adminData">

@Html.EditorFor(model => model.AffiliateWebSite)

@Html.ValidationMessageFor(model => model.Active)

</td>

</tr>

 

הבקר (controller)

במקרה הזה, הבקר אחראי למיפוי מודל domain data למודל ה- view שלנו וההפך. הסיבה שבחרנו במודל affiliate כדי להדגים את העדכון היא פשטותו. אנו רוצים שזו תהיה הקדמה לפלטפורמת nopCommerce ולכן רצינו שתהיה פשוטה עד כמה שניתן.

File System Location: [Project Root]\Presentation\Nop.Web\Administration\Controllerss\AffiliateController.cs
Assembly: Nop.Admin
Solution Location: Nop.Admin.Controllers.AffiliateController.cs

 

נעשה שלושה עדכונים למחלקה AffiliateController.

Data Model -> View ModelCreate View Model -> Data ModelEdit View Model -> Data Model

בדר"כ הייתי כותב בדיקות לקוד הבא כדי לוודא שמיפוי המודל עובד נכון, אבל נדלג על זה כרגע כדי להשאיר את הדברים פשוטים.

במתודה PrepareAffiliateModel הוסף את הקוד הבא מתחת ל- model.Active = affiliate.Active:

// Data Model -> Ceate/Edit View Model

model.AffiliateWebSite = affiliate.AffiliateWebSite;

במתודה ActionResult Create(AffiliateModel model, bool continueEditing) הוסף את הקוד הבא מתחת ל- affiliate.Active = model.Active

// Create View Model -> Data Model

affiliate.AffiliateWebSite = model.AffiliateWebSite;

 

שינוי דומה נדרש במתודה


public ActionResult Edit(AffiliateModel model, bool continueEditing):

// Edit View Model -> Data Model

affiliate.AffiliateWebSite = model.AffiliateWebSite;

 

פתרון בעיות

צור מחדש את בסיס הנתונים, בין אם בעזרת ה SQL script שלך או דרך ה- nopCommerce installer.עצור את ה- development web server בין שינויי הסכמה.פרסם הודעה מפורטת בפורום שלנו.