在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
};
}
}