码迷,mamicode.com
首页 > 其他好文 > 详细

关于多选属性如果在OO中表示呢?

时间:2015-02-05 13:29:49      阅读:157      评论:0      收藏:0      [点我收藏+]

标签:

在电子商务系统中 关于产品属性的问题

会设计如下几个表

产品信息        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);
            }
        }
    }

 

呵呵 说了这么多 好像有点罗嗦对吧  还没有说问题呢

 

关于多选属性如果在OO中表示呢?

标签:

原文地址:http://www.cnblogs.com/Sky-cloudless/p/4274478.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!