在Suteki.Shop中Model的原型是基於Linq to SQL建立的,其dbml檔案位於Suteki.Shop\Shop.dbml。 而Suteki.Shop在此檔案的基本上,以"partial class "的方式在Suteki.Shop\Model檔案夾下 建立了相應的類檔案以擴充Shop.dbml中Model類的一些方法和屬性聲明,如下圖:
為了便於 大家理解,下面以Model中的Product.cs為例進行說明。
Product是對網站中所銷售商品的資料信 息類。在其中定義了一些屬性(聲明在Shop.dbml中):
private int _ProductId; // 產品ID
private int _CategoryId; //產品所屬分類ID
private string _Name; // 產品名稱
private string _Description;//產品描述
private decimal _Price; //產 品價格
private int _Position; //在列表中的位置
private int _Weight; //重量
private bool _IsActive; //當前是否啟用顯示
private string _UrlName; //產品的 URL連結
而Product.cs這個檔案其實是以partial方式對Shop.dbml中的Product類的 "擴充",下面是其實現代碼:
public partial class Product : IOrderable, IActivatable, IUrlNamed
{
partial void OnNameChanging(string value)
{
value.Label("Name").IsRequired();
}
partial void OnNameChanged ()
{
UrlName = Name.ToUrlFriendly();
}
partial void OnDescriptionChanging(string value)
{
value.Label ("Description").IsRequired();
}
public bool HasMainImage
{
get
{
return this.ProductImages.Count > 0;
}
}
public Image MainImage
{
get
{
if (HasMainImage) return this.ProductImages.InOrder().First().Image;
return null;
}
}
public bool HasSize
{
get
{
return this.Sizes.Active().Count() > 0;
}
}
public Size DefaultSize
{
get
{
if (this.Sizes.Count() == 0) throw new ApplicationException("Product has no default size");
return this.Sizes[0];
}
}
public string IsActiveAsString
{
get
{
if (IsActive) return string.Empty;
return " Not Active";
}
}
public static Product DefaultProduct(int parentCategory, int position)
{
return new Product
{
ProductId = 0,
CategoryId = parentCategory,
Position = position
};
}
}