zoukankan      html  css  js  c++  java
  • nopCommerce开发者指南(二):更新一个现有实体,添加新属性的方法。

    原文链接:http://docs.nopcommerce.com/pages/viewpage.action?pageId=1442499

    翻译 by:yersans,如有不妥,敬请指正,博主邮箱:zhanglei0591@qq.com。转载请注明出处。

     

    本教程讲解如何在已发布的nopCommerce 源码中添加一个属性到Affiliate 实体。

     

    数据模型

     

    实体用两个类将记录映射到数据表中,第一个类定义所需的属性、字段和方法。

     

    文件位置 [Project Root]LibrariesNop.CoreDomainAffiliatesAffiliate.cs 

    程序集:Nop.Core 

    解决方案位置:Nop.Core.Domain.Affiliates.Affilate.cs

     

    第二个类将定义的属性映射到各自对应的SQL列上。这个类同样负责映射不同SQL表之间的关系。

     

    文件位置:[Project Root]LibrariesNop.DataMappingAffiliatesAffiliateMap.cs 

    程序集:Nop.Data 

    解决方案位置: Nop.Data.Mapping.Affiliates.AffiliateMap.cs

     

    把下面的属性添加到Affiliate 类中

     

    // 数据表对象(如Affiliate.cs)的实例成员必须用virtual关键字修饰
    // 数据访问框架要求使用Virtual关键字,以便能实现更多复杂的功能,如延迟加载等。

    public virtual string AffiliateWebSite { get; set; }

     

    将下面的代码添加到AffiliateMap 类的构造函数中

     

    // 这段代码把我们上面创建的属性映射为数据库中的一列

    // 它在 Affiliate 表中创建一个可空的最大长度为255个字符的nvchar类型字段

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

     

     

    现在,运行程序,重新安装数据库,检查相应的列是否已被正确创建。

    (附言:经博主本人测试,删除项目数据库和 opCommercePresentationNop.WebApp_DataSettings.txt文件,清理并重新生成整个项目,然后运行项目,会提示用户重新安装,安装成功后,数据库相关字段即成功更新。你也可以使用自定义的SQL脚本更新数据库。参见文末故障排除部分的建议。)

     

    表现层模型

     

    表现层模型用来把信息从控制器传递到视图(了解更多请访问asp.net/mvc)。模型还有一个用途:定义要求。

    我们的数据库配置只允许AffiliateWebSite字段存储255个字符以内大小的变量。如果我们尝试存储一个300个字符大小的变量,程序就会出错(或者会截短你输入的文本)。我们应当尽最大可能保护用户避免失败,视图模型有助于强制要求这些条件,例如字符串的最大长度。

     

    文件位置:[Project Root]PresentationNop.WebAdministrationModelsAffiliatesAffiliateModel.cs 

    程序集:Nop.Admin 

    解决方案位置:Nop.Admin.Models.Affiliates.AffiliateModel.cs


    验证类用来验证模型类中存储的数据(例如,非空字段,最大长度,和取值范围)。

     

    文件位置:[Project Root]PresentationNop.WebAdministrationValidatorsAffiliatesAffiliateValidator.cs 

    程序集: Nop.Admin 

    解决方案位置:Nop.Admin.Validators.Affiliates.AffiliateValidator.cs


    添加属性到视图模型

     

    // NopResourceDisplayName 提供了本地化时所用的关键字,

    // 我们的博客将会提供更多关于本地化的信息,请密切关注。

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

    public string AffiliateWebSite { get; set; }

     

    条件要求相关代码会被加入到对应validator类的构造函数中 

     

    //我想这句代码本身就能说明它的作用吧

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

     

    视图

    文件位置:[Project Root]PresentationNop.WebAdministrationViewsAffiliates _CreateOrUpdate.cshtml 

    程序集:Nop.Admin 

    解决方案位置:Nop.Admin.Views.Affiliates._CreateOrUpdate.cshtml



    视图包含用来显示模型数据的html代码。请把这些html代码放在“活动的”区域内。

    <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>

     

    控制器

     

    本例中,控制器负责将领域数据模型映射为视图模型,反之亦然。我选择affiliate模型的原因是因为它简单。我希望本篇关于nopCommerce 的介绍尽可能简单。

     

    文件位置:[Project Root]PresentationNop.WebAdministrationControllerssAffiliateController.cs 

    程序集:Nop.Admin 

    解决方案位置:Nop.Admin.Controllers.AffiliateController.cs



    我们将对AffiliateController 做三个更新

    • 数据模型->视图模型
    • 创建视图模型->数据模型
    • 编辑视图模型->数据模型

    通常我会在代码之后写一些测试,以确认模型映射正常工作,但是为了保持本文简单我把这一步留到测试项目时再做。

     

    在PrepareAffiliateModel的model.Active = affiliate.Active下面添加以下代码

     

    // 数据模型->创建/编辑 视图模型

    model.AffiliateWebSite = affiliate.AffiliateWebSite;

     

    在 public ActionResult Create(AffiliateModel model, bool continueEditing的affiliate.Active = model.Active下面添加以下代码


    // 创建视图模型 -> 数据模型

    affiliate.AffiliateWebSite = model.AffiliateWebSite;

     

    public ActionResult Edit(AffiliateModel model, bool continueEditing)做类似的修改

     

    // 编辑视图模型 -> 数据模型

    affiliate.AffiliateWebSite = model.AffiliateWebSite;

     

    数据库

     

    如果你是在扩展已安装的程序(包括已创建的数据库),那么你必须手动添加对应的列("AffiliateWebSite")到相应的表("Affiliate")中。

     

    故障排除

      • 重新创建数据库。用你自定义的SQL脚本或者nopCommerce 皆可。
      • 更新数据库结构时要暂停服务器。
      • 请把细节发布到我们的论坛以寻求帮助。
  • 相关阅读:
    Git工作原理
    将博客搬至CSDN
    Hive常见文件存储格式
    Hadoop进入安全模式源码分析
    Hadoop RPC简介
    hive自定义UDF函数
    hive性能调优之表设计层面调优
    flowable 启用慢 且启动不起来 报错看不懂
    数据结构和算法基础
    css: 边宽弧度
  • 原文地址:https://www.cnblogs.com/yersans/p/4386241.html
Copyright © 2011-2022 走看看