【翻译】从头开始编写一个Orchard网上商店模块(4) - 创建ProductPart

原文地址:http://skywalkersoftwaredevelopment.net/blog/writing-an-orchard-webshop-module-from-scratch-part-4
定义的ProductPart

这是从头开始编写一个新的Orchard模块的教程的第4篇。
对于本教程的概述,请参阅介绍

Orchard中的内容项(Content Items)由Content Parts组成。使用我们的网上商店模块,我们希望管理员可以通过把ProductPart附加到任何内容类型(ContentType)上,组成商品(Product)。
例如,用户可以定义一个“书”的内容类型,附加上ProductPart,就把“书”转化成了“商品”,然后就可以添加到购物车和订单及其明细中。

创建一个ProductPart,从而可以存储数据到数据库中,我们需要创建ProductRecord,并继承自Orchard.ContentManagement.Records.ContentPartRecord。
Orchard使用后缀“Record”作为规范,使用NHibernate ORM持久化。

  1. 添加对Orchard.Framework项目的引用,以便能够从Orchard.ContentManagement.Records.ContentPartRecord上继承。
  2. 添加新文件夹命名为”Models”
  3. 在”Models”文件夹中,创建一个新的类命名为ProductRecord。
  4. 在”Models”文件夹中,创建一个新的类命名为ProductPart,并从ContentPart <ProductRecord>继承。
  5. ProductPart将有以下属性:Price(价格)和SKU。


 您的解决方案现在应该是下面的样子的:

ProductRecord.cs:

在Orchard可以映射,加载和保存ProductRecord对象的实例到数据库之前,我们需要告诉它数据库表结构是什么样子。
我们通过创建一个叫Migration的类,一个继承自Orchard.Data.Migration.DataMigrationImpl,并调用一些方法来定义数据库结构(schema)的类。
在Migration里,我们告诉Orchard哪些表要创建和哪些ContenteTypes 和 ContentParts要创建。

在你的模块的跟目录下,创建一个名为Migrations.cs的新类,并敲入如下代码:

using Orchard.Data.Migration;

namespace Orchard.Webshop {
public class Migrations : DataMigrationImpl {

public int Create() {
SchemaBuilder.CreateTable("ProductRecord", table => table
.ContentPartRecord()
.Column<decimal>("Price")
.Column<string>("Sku", column => column.WithLength(50))
);

return 1;
}
}
}


“Create”是Orchard使用一个规范,在启用模块时,它将为调用。
ContentPartRecord方法是一种简便的方法,用于创建一个ID列,并设置为主键:

/// <summary>
/// Defines a primary column as for content parts
/// </summary>
public CreateTableCommand ContentPartRecord() {
Column<int>("Id", column => column.PrimaryKey().NotNull());
return this;
}


在我们的例子中,我们已经启用了模块。但果Orchard很聪明,它检测到现有一个DataMigration可用, 然后它会检查当前存储的Migration版本号,我们的模块启用时,没有Migration可运行,所以在Orchard_Framework_DataMigrationRecord表也找不相应的版本号:


当您刷新Orchard Admin页面,Orchard将显示一个通知,显示需要升级一些功能:

点击Orchard.Webshop链接,您将直接调转到模块页面,并显示Orchard.Webshop功能:

当您单击“Upgrade”,Orchard将调用我们的Migrations类的Create方法,从而创建名为Orchard_Webshop_ProductRecord表:

你可能感兴趣的:(char)