标签:
在电子商务系统中 关于产品属性的问题
会设计如下几个表
产品信息 Product
选项信息表 Option 存储 Size Color....
选项值信息表 OptionValue 存储每个选项的值信息 比如 X,XL;red blue 等值信息
选项--选项值信息表 OptionToValue 存储选项和选项值之间的关系【一对多的关系】
产品属性信息表 将产品ID 选项ID 选项值ID 关联起来 ProductAttribute
下面贴出几个表的信息
CREATE TABLE [Product] ( [ProductID] [int] IDENTITY(1,1) NOT NULL, Name --当然我简写了 )
CREATE TABLE [Option] ( [OptionID] [int] IDENTITY(1,1) NOT NULL, [Name] [nvarchar](64) NOT NULL DEFAULT (‘‘), [SortOrder] [int] NULL DEFAULT ((0)) )
CREATE TABLE [OptionValue] ( [OptionValueID] [int] IDENTITY(1,1) NOT NULL, [Value] [nvarchar](64) NOT NULL DEFAULT (‘‘), [SortOrder] [int] NULL DEFAULT ((0)) )
CREATE TABLE [OptionToValue] ( [OptionToValueID] [int] IDENTITY(1,1) NOT NULL, [OptionID] [int] NOT NULL DEFAULT ((0)), [OptionValueID] [int] NOT NULL DEFAULT ((0)) )
CREATE TABLE [ProductAttribute] ( [AttributeID] [int] IDENTITY(1,1) NOT NULL, [ProductID] [int] NOT NULL DEFAULT ((0)), [OptionID] [int] NOT NULL DEFAULT ((0)), [OptionValueID] [int] NOT NULL DEFAULT ((0)), [SortOrder] [int] NULL DEFAULT ((0)) )
现在我在程序中 使用这几个东西
关系也是明确的
选项---选项值 一对多
产品--选项 一对多
好创建系统中的VO 对象
先来创建 选项 ---选项值 Option类维护一个List<OptionValueInfo> Values 的一个引用 完成一对多关系的维护
public class OptionInfo : EntityInfo { public int OptionID { get; set; } public string Name { get; set; } public int SortOrder { get; set; } public List<OptionValueInfo> Values { get { return OptionManager.GetOptionValueList(OptionID); } } } public class OptionValueInfo : EntityInfo { public int OptionValueID { get; set; } public string Value { get; set; } public int SortOrder { get; set; } }
产品--选项
我通过产品ID 查询该产品的多个选项【也叫做属性】 通过 List<OptionInfo> Attributes 来维护引用关系
查询SQL语句如下
select * from [Option] where OptionID in (select distinct OptionID from dbo.ProductAttribute where ProductAttribute.ProductID=1)
实现
public List<OptionInfo> GetOptionList(int productID) { string cmdText = "select * from [Option] where OptionID in "; cmdText += "(select distinct OptionID from ProductAttribute where ProductAttribute.ProductID=@ProductID)"; SqlParameter[] parms = { SQLHelper.MakeInParam("@ProductID", SqlDbType.Int, 4, productID) }; return DbEntityHelper.DataReaderToEntities<OptionInfo>(SQLHelper.ExecuteReader(cmdText, parms)); }
public class ProductInfo : EntityInfo { private string _code; private CurrencyInfo _currencyInfo; public ProductInfo() { this._code = Utils.GetCookie(OCKeys.COOKIE_CURRENCY); if (!string.IsNullOrEmpty(_code)) { _currencyInfo = CurrencyManager.GetCurrencyByCode(_code); //这样获取有问题 因为CurrencyInfo构造器并没有任何的初始化 应该再次读取一次 //if (_currencyInfo == null) //{ // this._currencyInfo = new CurrencyInfo(); //} } } #region 基础属性 public int ProductID { get; set; } public string Name { get; set; } public int CategoryID { get; set; } public decimal Price { get; set; } public decimal SingleDiscount { get; set; } public decimal GroupDiscount { get; set; } public int Status { get; set; } public int CustomAttribute { get; set; } public List<OptionInfo> Attributes { get { return OptionManager.GetOptionList(ProductID); } } }
呵呵 说了这么多 好像有点罗嗦对吧 还没有说问题呢
标签:
原文地址:http://www.cnblogs.com/Sky-cloudless/p/4274478.html