對已有實體增長一個屬性(對Category增長一個
SomeNewProperty)
1.對實體對象的操做。這裏的實體指的是領域對象。實體對象經過兩個類來匹配到數據庫的表中
1)Category.cs
這個類定義了應用要用到屬性、字段和方法。
File System Location
: [Project Root]\Libraries\Nop.Core\Domain\Catalog\Category.cs
Assembly
: Nop.Core
Solution Location
: Nop.Core.Domain.Catalog.Category.cs
添加一個屬性:
public string SomeNewProperty { get; set; }
2)CategoryMap.cs
這個類定義了屬性對應的表字段,以及表關係。Nop採用了EF 的Code First方式。Code first有兩種方式來實現這種功能:DataAnnotations 和Fluent API。Nop採用了純粹的Fluent API方式,這樣POCO實體的功能更純粹。
File System Location
: [Project Root]\Libraries\Nop.Data\Mapping\Catalog\CategoryMap.cs
Assembly
: Nop.Data
Solution Location
: Nop.Data.Mapping.Catalog.CategoryMap.cs
增長一條配置:
this.Property(m => m.SomeNewProperty).HasMaxLength(255).IsOptional();
2.對實體ViewModel的操做。
Nop把實體驗證獨立到CategoryValidator.cs中,再經過對實體添加特性[Validator(typeof(CategoryValidator))]進行驗證。因此這裏也要改兩個類
1)
CategoryModel.cs
這個類至關於ViewModel。
File System Location
: [Project Root]\Presentation\Nop.Web\Administration\Models\Catalog\CategoryModel.cs
Assembly
: Nop.Admin
Solution Location
: Nop.Admin.Models.Catalog.CategoryModel.cs
增長一條屬性:
public string SomeNewProperty { get; set; }
2)
CategoryValidator.cs
實現viewmodel的驗證。
File System Location
: [Project Root]\Presentation\Nop.Web\Administration\Validators\Catalog\CategoryValidator.cs
Assembly
: Nop.Admin
Solution Location
: Nop.Admin.Validators.Catalog.CategoryValidator.cs
增長一條驗證規則:
RuleFor(m => m.SomeNewProperty).Length(0, 255);
3.頁面展現的操做。
把增長的屬性顯示到頁面上,能夠進行操做。
File System Location
: [Project Root]\Presentation\Nop.Web\Administration\Views\Category\ _CreateOrUpdate.cshtml
Assembly
: Nop.Admin
在240行下增長:
<tr>
<td class="adminTitle">
@Html.NopLabelFor(model => model.SomeNewProperty):
</td>
<td class="adminData">
@Html.EditorFor(model => model.SomeNewProperty)
@Html.ValidationMessageFor(model => model.SomeNewProperty)
</td>
</tr>
4.對Controller的操做
文中提到了在Controller中對涉及到實體轉換時,可能須要添加代碼。可是nop用AutoMapper自動進行了實體轉換,這裏無實際的代碼修改。
注意:Nop沒有開啓數據遷移,按文檔操做時須要手動在表Category上添加列
SomeNewProperty
。
開啓數據遷移相關操做參考
總結起來就是兩步:1.在webconfig中添加鏈接字符串。2.在上下文對象NopObjectContext中增長一個無參構造函數 public NopObjectContext():base("connectionString"){}
關鍵在於
Add-Migration InitialMigration -IgnoreChanges 後面的參數必定要有,表示初始狀態
至此,完成了對nop實體添加屬性的操做。