修改nopCommerce中的实体
对已有实体增加一个属性(对Category增加一个SomeNewProperty)
最近在研究nopcommerce,这里是对官网上文档的学习,完成了更改现有实体一个属性和开启code first的操作。官网地址:http://docs.nopcommerce.com/pages/viewpage.action?pageId=1442499
1.对实体对象的操作。这里的实体指的是领域对象。实体对象通过两个类来匹配到数据库的表中
1)Category.cs
这个类定义了应用要用到属性、字段和方法。
File System Location: [Project Root]\Libraries\Nop.Core\Domain\Catalog\Category.cs
Assembly: Nop.Core
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
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
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>
<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实体添加属性的操作。


【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异