对已有实体增加一个属性(对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 
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实体添加属性的操作。
 
 
 
                             
 

修改nopCommerce中的实体的更多相关文章

  1. 在快速自定义的NopCommerce中使用实体框架(EF)代码优先迁移

    我看到很多nopCommerce论坛的用户问他们如何使用Entity Framework(EF)代码优先迁移来自定义nopCommerce,添加新的字段和entites核心.我实际上在做nopComm ...

  2. ADO.NET EF 中的实体修改方法

    http://www.cnblogs.com/zfz15011/archive/2010/05/30/1747486.html 1.传统修改模式,看下列代码 using (NorthwindEntit ...

  3. 《Entity Framework 6 Recipes》中文翻译系列 (20) -----第四章 ASP.NET MVC中使用实体框架之在MVC中构建一个CRUD示例

    翻译的初衷以及为什么选择<Entity Framework 6 Recipes>来学习,请看本系列开篇 第四章  ASP.NET MVC中使用实体框架 ASP.NET是一个免费的Web框架 ...

  4. 《Entity Framework 6 Recipes》中文翻译系列 (40) ------ 第七章 使用对象服务之从跟踪器中获取实体与从命令行生成模型(想解决EF第一次查询慢的,请阅读)

    翻译的初衷以及为什么选择<Entity Framework 6 Recipes>来学习,请看本系列开篇 7-5  从跟踪器中获取实体 问题 你想创建一个扩展方法,从跟踪器中获取实体,用于数 ...

  5. Entity Framework Code First添加修改及删除单独实体

    对于一个单独实体的通常操作有3种:添加新的实体.修改实体以及删除实体. 1.添加新的实体 Entity Framework Code First添加新的实体通过调用DbSet.Add()方法来实现. ...

  6. EF4.1: Add/Attach and Entity States(EF中的实体状态转换说明)

    实体的状态,连接以及 SaveChanges 方法 数据库上下文对象维护内存中的对象与数据库中数据行之间的同步.这些信息在调用 SaveChanges方法被调用的时候使用.例如,当使用 Add 方法传 ...

  7. Hibernate中的实体规则、对象状态和进阶-一级缓存

    一.hibernate中的实体规则 1.实体类创建的注意事项 2.主键类型 3.主键生成策略 (1)代理主键 (2)自然主键 二.hibernate中的对象状态 1.对象分为三种状态 2.三种状态的转 ...

  8. abp 修改abp.zero的实体映射类,使生成的表和字段为大写状态

    在我们项目中,由于涉及到报表配置管理,可以通过一段sql快捷的配置出一个报表页面.部分sql会与abp框架的一些系统表做关联查询,而abp的映射类没有单独设置表和字段的名称,默认用类名和属性名,区分大 ...

  9. How to: Use Both Entity Framework and XPO in a Single Application 如何:在单个应用程序中同时使用实体框架和 XPO

    This topic demonstrates how to create a simple XAF application that uses both the Entity Framework ( ...

随机推荐

  1. python multiprocessing.Process

    在使用Kafka-python时自己写的一个bug 我在一个进程的__init__中初始化了一个producer,但是一直不好用 但是在函数里直接new一个就好用了 why? 需要说明的是produc ...

  2. java 信号量Semaphore

    Semaphore 信号量主要用于约束多个线程可同时获取的物理上的或者逻辑上的资源数.比如用在各种池的设计中. 信号量用于管理这些资源的一个虚拟的管理凭据.线程在获取一个资源时,首先要获取一个资源的许 ...

  3. keepalived(nat)+ftp+http

    一. 环境要求需要2台LVS和n(n>=2)台RS操作系统 负载均衡模式 VIP NVIPRHEL7.4 NAT 193.168.141.30 192.168.102.165 LVS1 LVS2 ...

  4. 豹哥嵌入式讲堂:ARM开发之文件详解(4)- relocatable文件(object, library)

    大家好,我是豹哥,猎豹的豹,犀利哥的哥.今天豹哥给大家讲的是嵌入式开发里的relocatable文件(object, library). 前三节课里,豹哥都是在给大家介绍嵌入式开发中的input文件. ...

  5. java web 之 listen 与 filter

    一.Listener监听器 Javaweb开发中的监听器,是用于监听web常见对象 HttpServletRequest HttpSession ServletContext 监听它们的创建与销毁.属 ...

  6. c#快速写本地日志

    很多人的程序在本地运行是好的,但是发布在服务器上后就会有各种各样的问题,但是服务器上又不能直接调试,所以直接读写本地日志成为解决问题的关键,我这个方法,会在发布网站的根目录自动创建 log.txt,并 ...

  7. Redis随笔(二)redis desktop manager 安装并且连接redis服务器

    1.首先在win10下安装redis desktop manager 2.查看虚拟机防火墙状态,启动状态,则关闭掉 查看防火墙状态: systemctl status firewalld.servic ...

  8. Echars 6大公共组件详解

    Echars 六大组件详解 : title  tooltip toolbox legend  dataZoom visualMap 一.title标题详解 myTitleStyle = { color ...

  9. Python中的数据类型以及他们的方法

    数据类型: 1)int i = 100 print(i.bit_length()) ''' bit_length 1 0000 0001 1 2 0000 0010 2 3 0000 0011 2 2 ...

  10. Nginx+Tomcat实现负载均衡小demo

    一.搭建Tomcat服务 下载安装JDK和Tomcat就不说了,太简单了.由于是win7单机环境测试,启动多个Tomcat服务可以通过在server.xml配置文件中修改端口实现.准备两个Tomcat ...