½ñÌìÒª½éÉܵľÍÊÇsql2005µÄxml×Ö¶ÎÀàÐÍÔÚ.netÖеÄÓ¦Óᣵ÷Óùý³ÌÊÇ£ºÏÈÔËÓò¢Ðл¯µÄ°ì·¨°Ñxml×Ö¶ÎÀàÐÍÖеÄÊý¾Ýת»»³ÉModel¶ÔÏ󣬶ÔModel¶ÔÏó²Ù×÷ºó£¬ÔÙÔËÓô®Ðл¯µÄ·½·¨°ÑModel¶ÔÏóת±ä³Éxml¸ñʽ£¬×îºó´æ´¢µ½Êý¾Ý¿âÖС£
       ÎÒÈÏΪÈç¹û°Ñ¸´ÔÓµÄÒµÎñ¹ØÏµÊý¾Ý´æ´¢ÔÚxml×Ö¶ÎÖУ¬¿É¼ò»¯Êý¾Ý¿âµÄÉè¼Æ£¬·½±ãÒµÎñµÄ´¦Àí¡£

       ÕâÀïдÁ˸öСdemo£º
     
      ¼ÙÈçÎÒÃÇÓкܶàµêÆÌÐÅÏ¢£¬Ã¿¸öµêÆÌ¶¼ÓÐÒ»¸öShopID£¬ ËùÒÔÎÒÃǾͰÑͬһµêÆÌµÄÐÅÏ¢·ÅÔÚÒÔShopIDÃüÃûµÄÎļþ¼ÐÏ£¬µ±Ò»Ì¨·þÎñÆ÷·Å²»ÏÂʱ£¬ÎÒÃǾͲ¿Êð¶ą̀£¬ÕâÑùÿ̨·þÎñÆ÷´æ´¢µÄµêÆÌÊDz»Ò»ÑùµÄ¡£ÕâЩ·þÎñÆ÷¾Í¹¹³ÉÁËÒ»¸ö·þÎñÆ÷Ⱥ¡£³öÓÚÐèÒª£¬ÎÒÃÇÒª°ÑÕâ¸öȺ¸´Öƶà¸ö£¬²¿ÊðÔÚ²»Í¬µÄµØÇø£¨×¢Ò⣬¸÷¸öȺµÄÐÅÏ¢ÊÇÏàͬµÄ£©¡£ÎªÁËÍê³ÉÕâ¸öÄ¿µÄ£¬ÎÒÃÇÏÈÉè¼ÆÁËÊý¾ÝÄ£ÐÍ MServerGroup£¨·þÎñÆ÷ȺÐÅÏ¢£©£¬MServer£¨·þÎñÆ÷ȺϵķþÎñÆ÷ÐÅÏ¢£©£¬MServerShop£¨·þÎñÆ÷¶ÔÓ¦µÄµêÆÌ£©£º

    /// <summary>
    /// ·þÎñÆ÷ȺÐÅÏ¢
    /// </summary>
    /// <remarks>
    /// ÓÃÓÚ´æ·Åµã²¥Îļþ·þÎñÆ÷ȺµÄÐÅÏ¢,±ÈÈçÖ÷Õ¾µÄ,±±¾©Õ¾µÄ,ÉϺ£Õ¾µÄ;¸÷¸öÕ¾µÄÊý¾ÝÏàͬ.
    /// ·þÎñÆ÷ȺµÄÄ¿µÄÊÇ·ÖÉ¢Êý¾Ý¿âµÄѹÁ¦.
    /// ĿǰֻÓÐÖ÷Õ¾µÄ.
    /// </remarks>
    [Serializable()]
    public class MServerGroup : BaseModelEntity
    {
        #region private
        private int _ServerGroupID;
        private string _ServerGroupName;
        private MServerCollection _Servers;
        #endregion

        #region constructor
        /// <summary>
        /// ·þÎñÆ÷ȺÐÅÏ¢
        /// </summary>
        public MServerGroup()
        {
        }

        /// <summary>
        /// ·þÎñÆ÷ȺÐÅÏ¢
        /// </summary>
        /// <param name="_ServerGroupID">·þÎñÆ÷ȺID</param>
        /// <param name="_ServerGroupName">·þÎñÆ÷ȺÃû³Æ</param>
        public MServerGroup(int _ServerGroupID, string _ServerGroupName)
        {
            this._ServerGroupID = _ServerGroupID;
            this._ServerGroupName = _ServerGroupName;
        }
        #endregion

        #region property
        /// <summary>
        /// ·þÎñÆ÷ȺID
        /// </summary>
        public int ServerGroupID
        {
            get
            {
                return _ServerGroupID;
            }
            set
            {
                this._ServerGroupID = value;
            }
        }

        /// <summary>
        /// ·þÎñÆ÷ȺÃû³Æ
        /// </summary>
        public string ServerGroupName
        {
            get
            {
                return _ServerGroupName;
            }
            set
            {
                this._ServerGroupName = value;
            }
        }

        /// <summary>
        /// ·þÎñÆ÷ȺϵķþÎñÆ÷¼¯ºÏ
        /// </summary>
        public MServerCollection Servers
        {
            get
            {
                return _Servers;
            }
            set
            {
                this._Servers = value;
            }
        }
        #endregion
    }


    /// <summary>
    /// ·þÎñÆ÷ȺϵķþÎñÆ÷ÐÅÏ¢
    /// </summary>
    /// <remarks>
    /// ÓÃÓÚ´æ·Åµã²¥ÎļþµÄ·þÎñÐÅÏ¢
    /// </remarks>
    [Serializable()]
    public class MServer : BaseModelEntity
    {
        #region private
        private int _ServerID;
        private string _ServerName;
        private string _IP;
        private string _DomainName;
        private string _Dir;
        private string _Url;
        private int _ServerGroupID;
        private MServerShopCollection _ServerShops;
        #endregion

        #region constructor
        /// <summary>
        /// ·þÎñÆ÷ÐÅÏ¢
        /// </summary>
        public MServer()
        {
        }

        /// <summary>
        /// ·þÎñÆ÷ÐÅÏ¢
        /// </summary>
        /// <param name="_ServerID">·þÎñÆ÷ID</param>
        /// <param name="_ServerName">·þÎñÆ÷Ãû³Æ</param>
        /// <param name="_IP">·þÎñÆ÷IP</param>
        /// <param name="_DomainName">·þÎñÆ÷ÓòÃû</param>
        /// <param name="_Dir">Îļþ´æ·ÅĿ¼</param>
        /// <param name="_Url">Îļþ´æ·ÅUrl</param>
        /// <param name="_ServerGroupID">¶ÔÓ¦µÄ·þÎñÆ÷ȺID</param>
        /// <param name="_ServerShops">·þÎñÆ÷¶ÔÓ¦µÄµêÆÌÐÅÏ¢</param>
        public MServer(int _ServerID, string _ServerName, string _IP, string _DomainName, string _Dir, string _Url, int _ServerGroupID, MServerShopCollection _ServerShops)
        {
            this._ServerID = _ServerID;
            this._ServerName = _ServerName;
            this._IP = _IP;
            this._DomainName = _DomainName;
            this._Dir = _Dir;
            this._Url = _Url;
            this._ServerGroupID = _ServerGroupID;
            this._ServerShops = _ServerShops;
        }

        /// <summary>
        /// ·þÎñÆ÷ÐÅÏ¢
        /// </summary>
        /// <param name="_ServerID">·þÎñÆ÷ID</param>
        /// <param name="_ServerName">·þÎñÆ÷Ãû³Æ</param>
        /// <param name="_IP">·þÎñÆ÷IP</param>
        /// <param name="_DomainName">·þÎñÆ÷ÓòÃû</param>
        /// <param name="_Dir">Îļþ´æ·ÅĿ¼</param>
        /// <param name="_Url">Îļþ´æ·ÅUrl</param>
        /// <param name="_ServerGroupID">¶ÔÓ¦µÄ·þÎñÆ÷ȺID</param>
        /// <param name="_xmlStrServerShops">·þÎñÆ÷¶ÔÓ¦µÄµêÆÌÐÅÏ¢µÄxml×Ö·û´®</param>
        public MServer(int _ServerID, string _ServerName, string _IP, string _DomainName, string _Dir, string _Url, int _ServerGroupID, string _xmlStrServerShops)
        {
            this._ServerID = _ServerID;
            this._ServerName = _ServerName;
            this._IP = _IP;
            this._DomainName = _DomainName;
            this._Dir = _Dir;
            this._Url = _Url;
            this._ServerGroupID = _ServerGroupID;
            this._ServerShops = Common.Utilities.SerializationHelper<MServerShopCollection>.FromXML(_xmlStrServerShops);
        }
        #endregion

        #region property
        /// <summary>
        /// ·þÎñÆ÷ID
        /// </summary>
        public int ServerID
        {
            get
            {
                return _ServerID;
            }
            set
            {
                this._ServerID = value;
            }
        }

        /// <summary>
        /// ·þÎñÆ÷Ãû³Æ
        /// </summary>
        public string ServerName
        {
            get
            {
                return _ServerName;
            }
            set
            {
                this._ServerName = value;
            }
        }

        /// <summary>
        /// ·þÎñÆ÷IP
        /// </summary>
        public string IP
        {
            get
            {
                return _IP;
            }
            set
            {
                this._IP = value;
            }
        }

        /// <summary>
        /// ·þÎñÆ÷ÓòÃû
        /// </summary>
        public string DomainName
        {
            get
            {
                return _DomainName;
            }
            set
            {
                this._DomainName = value;
            }
        }

        /// <summary>
        /// Îļþ´æ·ÅĿ¼
        /// </summary>
        public string Dir
        {
            get
            {
                return Dir;
            }
            set
            {
                this.Dir = value;
            }
        }

        /// <summary>
        /// Îļþ´æ·ÅUrl
        /// </summary>
        public string Url
        {
            get
            {
                return _Url;
            }
            set
            {
                this._Url = value;
            }
        }


        /// <summary>
        /// ¶ÔÓ¦µÄ·þÎñÆ÷ȺID
        /// </summary>
        public int ServerGroupID
        {
            get
            {
                return _ServerGroupID;
            }
            set
            {
                this._ServerGroupID = value;
            }
        }


        /// <summary>
        /// ·þÎñÆ÷¶ÔÓ¦µÄµêÆÌÐÅÏ¢
        /// </summary>
        public MServerShopCollection ServerShops
        {
            get
            {
                return _ServerShops;
            }
            set
            {
                this._ServerShops = value;
            }
        }
        #endregion
    }
      

    /// <summary>
    /// ·þÎñÆ÷¶ÔÓ¦µÄµêÆÌ
    /// </summary>
    /// <remarks>
    /// ÓÃÓÚ´æ·ÅºÍ·þÎñÆ÷¶ÔÓ¦µÄµêÆÌ
    /// </remarks>
    [Serializable()]
    [XmlRoot(ElementName = "Shop", Namespace = "http://www.linkedu.com.cn/MServerShop.xsd")]
    public class MServerShop : BaseModelEntity
    {
        #region private
        private int _ShopID;
        private string _ShopName;
        #endregion

        #region constructor
        /// <summary>
        /// ·þÎñÆ÷¶ÔÓ¦µÄµêÆÌÐÅÏ¢
        /// </summary>
        public MServerShop()
        {
        }

        /// <summary>
        /// ·þÎñÆ÷¶ÔÓ¦µÄµêÆÌÐÅÏ¢
        /// </summary>
        /// <param name="_ShopID">µêÆÌID</param>
        /// <param name="_ShopName">µêÆÌÃû³Æ</param>
        public MServerShop(int _ShopID, string _ShopName)
        {
            this._ShopID = _ShopID;
            this._ShopName = _ShopName;
        }
        #endregion

        #region property
        /// <summary>
        /// µêÆÌID
        /// </summary>
        [XmlAttribute]
        public int ShopID
        {
            get
            {
                return _ShopID;
            }
            set
            {
                this._ShopID = value;
            }
        }

        /// <summary>
        /// µêÆÌÃû³Æ
        /// </summary>
        [XmlAttribute]
        public string ShopName
        {
            get
            {
                return _ShopName;
            }
            set
            {
                this._ShopName = value;
            }
        }
        #endregion
    }

   ΪÁ˶ÔÄ£Ð͵ļ¯ºÏÐÅÏ¢½øÐÐÃèÊö£¬ÎÒÃÇÓÐÉè¼ÆÁËMServerGroupCollection£¨·þÎñÆ÷ȺÐÅÏ¢¼¯ºÏ£©£¬MServer£¨·þÎñÆ÷ȺϵķþÎñÆ÷ÐÅÏ¢£©£¬MServerShopCollection£¨·þÎñÆ÷¶ÔÓ¦µÄµêÆÌ¼¯ºÏ£©

    /// <summary>
    /// ·þÎñÆ÷ȺÐÅÏ¢¼¯ºÏ
    /// </summary>
    /// <remarks>
    [Serializable()]
    [XmlRoot("ServerGroups")]
    public class MServerGroupCollection : List<MServerGroup>
    {
        /// <summary>
        /// ·þÎñÆ÷ȺÐÅÏ¢¼¯ºÏ
        /// </summary>
        public MServerGroupCollection()
        {
            this._MServerGroups = new List<MServerGroup>();
        }

        private List<MServerGroup> _MServerGroups;

        public List<MServerGroup> MServerGroups
        {
            get
            {
                return this._MServerGroups;
            }
            set
            {
                this._MServerGroups = value;
            }
        }
    }

    /// <summary>
    /// ·þÎñÆ÷ȺϵķþÎñÆ÷ÐÅÏ¢¼¯ºÏ
    /// </summary>
    [XmlRoot("Servers")]
    [Serializable()]
    public class MServerCollection : List<MServer>
    {
        /// <summary>
        /// ·þÎñÆ÷ȺϵķþÎñÆ÷ÐÅÏ¢¼¯ºÏ
        /// </summary>
        public MServerCollection()
        {
            this._MServers = new List<MServer>();
        }

        private List<MServer> _MServers;

        public List<MServer> MServers
        {
            get
            {
                return this._MServers;
            }
            set
            {
                this._MServers = value;
            }
        }
    }

    /// <summary>
    /// ·þÎñÆ÷¶ÔÓ¦µÄµêÆÌ¼¯ºÏ
    /// </summary>
    [Serializable()]
    [XmlRoot(ElementName = "Shops", Namespace = "http://www.linkedu.com.cn/MServerShop.xsd")]
    public class MServerShopCollection
    {
        private List<MServerShop> _MServerShops;

        [XmlElement("Shop")]
        public List<MServerShop> MServerShops
        {
            get
            {
                return this._MServerShops;
            }
            set
            {
                this._MServerShops = value;
            }
        }
        /// <summary>
        /// ·þÎñÆ÷¶ÔÓ¦µÄµêÆÌ¼¯ºÏÀà
        /// </summary>
        public MServerShopCollection()
        {
            this._MServerShops = new List<MServerShop>();
        }

    }

¾­·ÖÎö£¬·þÎñÆ÷¶ÔÓ¦µÄµêÆÌÐÅÏ¢¿ÉÓÃxml´æ´¢£¬Éè¼Æ¸ñʽÈçÏ£¨ÓÃxsdÃèÊö£¬Éè¼ÆºÃºó£¬ÎÒÃǰÑËü´´½¨µ½Êý¾Ý¿âÖУ©
CREATE XML SCHEMA COLLECTION [dbo].[MServerShop] AS
N'<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:t="http://www.linkedu.com.cn/MServerShop.xsd" targetNamespace="http://www.linkedu.com.cn/MServerShop.xsd" elementFormDefault="qualified">
<xsd:element name="Shops">
  <xsd:complexType>
     <xsd:complexContent>
       <xsd:restriction base="xsd:anyType">
          <xsd:sequence>
             <xsd:element name="Shop" type="t:ServerShop" minOccurs="0" maxOccurs="unbounded" />
          </xsd:sequence>
       </xsd:restriction>
    </xsd:complexContent>
  </xsd:complexType>
</xsd:element>
<xsd:complexType name="ServerShop">
  <xsd:complexContent>
   <xsd:restriction base="xsd:anyType">
    <xsd:sequence />
      <xsd:attribute name="ShopID" type="xsd:int" use="required" />
      <xsd:attribute name="ShopName" type="xsd:string" use="required" />
    </xsd:restriction>
  </xsd:complexContent>
</xsd:complexType>
</xsd:schema>'

×îºó£¬ÎÒÉè¼ÆÁË£¨·þÎñÆ÷ȺÐÅÏ¢ ES_ServerGroup£©£¬£¨·þÎñÆ÷ȺϵķþÎñÆ÷ÐÅÏ¢ ES_Server£©µÄÊý¾Ý±í, ÔÚ ES_Server Êý¾Ý±íÖУ¬ÎÒÃǰѷþÎñÆ÷¶ÔÓ¦µÄµêÆÌÐÅÏ¢·ÅÔÚES_ServerÊý¾Ý±íÏÂÓÃxml±íʾ£¬²¢¼ÓÈëÉϱßÉè¼ÆµÄxsdÔ¼Êø¡£ 

CREATE TABLE [dbo].[ES_ServerGroup](
 [ServerGroupID] [int] NOT NULL,
 [ServerGroupName] [nvarchar](20) COLLATE Chinese_PRC_CI_AS NOT NULL,
 CONSTRAINT [PK_ES_SERVERGROUP] PRIMARY KEY CLUSTERED
(
 [ServerGroupID] ASC
)WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]

CREATE TABLE [dbo].[ES_Server](
 [ServerID] [int] NOT NULL,
 [ServerGroupID] [int] NULL,
 [ServerName] [nvarchar](20) COLLATE Chinese_PRC_CI_AS NOT NULL,
 [IP] [nvarchar](15) COLLATE Chinese_PRC_CI_AS NULL,
 [DomainName] [nvarchar](20) COLLATE Chinese_PRC_CI_AS NULL,
 [Dir] [nvarchar](255) COLLATE Chinese_PRC_CI_AS NULL,
 [Url] [nvarchar](255) COLLATE Chinese_PRC_CI_AS NULL,
 [ServerShops] [xml](CONTENT [dbo].[MServerShop]) NULL,
 CONSTRAINT [PK_ES_SERVER] PRIMARY KEY CLUSTERED
(
 [ServerID] ASC
)WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]

ÏÂÒ»²½£¬ÎÒ¿ªÊ¼Éè¼ÆÊý¾Ý·ÃÎʽӿڣ¬È»ºóÉè¼ÆÊý¾Ý·ÃÎʲãºÍÒµÎñ²ã£¬×îºóÉè¼Æ±íÏֲ㡣
ΪÁËÑÝʾ·½±ã£¬DemoÖÐÎÒʡȥÁ˽ӿڵÄÊéдºÍÒµÎñ²ã£¬ÎÒÔÚ±íÏÖ²ãÖ±½Óµ÷ÓÃÁËÊý¾Ý·ÃÎʲã

Êý¾Ý·ÃÎʲã´úÂëÈçÏ£º

    /// <summary>
    /// ·þÎñÆ÷ȺϵķþÎñÆ÷ÐÅÏ¢Êý¾Ý·ÃÎʲã
    /// </summary>
    public class DServer
    {
        #region constructor
        public DServer()
        {
        }
        #endregion

        #region public method

        #region µÃµ½µ±Ç°

        #region µÃµ½Ä³·þÎñÆ÷ÐÅÏ¢ MServer GetMServer(int _ServerID)
        /// <summary>
        /// µÃµ½Ä³·þÎñÆ÷ÐÅÏ¢
        /// </summary>
        /// <param name="_ServerID">·þÎñÆ÷µÄServerID</param>
        /// <returns>µÃµ½Ä³·þÎñÆ÷ÐÅÏ¢</returns>
        public MServer GetMServer(int _ServerID)
        {
            DataProvider dp = SqlTools.HelpWWW.DataProviderUse;
            using (IDbConnection conn = dp.GetConnection())
            {
                Common.DataAccess.ORMapping.IConvert ic = dp.GetIConvert();
                Common.DataAccess.ORMapping.Mapping m = ic.GetNewMapping();
                m.AddSql("select * from ES_Server where ");
                m.AddSql(" ServerID=");
                m.AddSql("ServerID", _ServerID);
                using (IDataReader idr = m.ExecuteReader(conn))
                {
                    if (idr.Read())
                    {
                        return new MServer(_ServerID, idr["ServerName"].ToString(), idr["IP"].ToString(), idr["DomainName"].ToString(), idr["Dir"].ToString(), idr["Url"].ToString(), (int)idr["ServerGroupID"], idr["ServerShops"].ToString());
                    }
                }
                return null;
            }
        }
        #endregion

        #region ¹ØÓÚMServerShopµÄ²Ù×÷

        #region µÃµ½·þÎñÆ÷¶ÔÓ¦µÄµêÆÌ¼¯ºÏ MServerShopCollection GetMServerShop(int _ServerID)
        /// <summary>
        /// µÃµ½·þÎñÆ÷¶ÔÓ¦µÄµêÆÌ¼¯ºÏ
        /// </summary>
        /// <param name="_ServerID">·þÎñÆ÷µÄServerID</param>
        /// <returns>µÃµ½·þÎñÆ÷¶ÔÓ¦µÄµêÆÌÊý×é</returns>
        public MServerShopCollection GetMServerShop(int _ServerID)
        {
            DataProvider dp = SqlTools.HelpWWW.DataProviderUse;
            using (IDbConnection conn = dp.GetConnection())
            {
                Common.DataAccess.ORMapping.IConvert ic = dp.GetIConvert();
                Common.DataAccess.ORMapping.Mapping m = ic.GetNewMapping();
                m.AddSql("select ServerShops from ES_Server where ");
                m.AddSql(" ServerID=");
                m.AddSql("ServerID", _ServerID);
                string xmlstr = m.ExecuteScalar(conn).ToString();
                return Common.Utilities.SerializationHelper<MServerShopCollection>.FromXML(xmlstr);
            }
        }
        #endregion

        #region ±£´æ·þÎñÆ÷¶ÔÓ¦µÄµêÆÌÐÅÏ¢ void SaveMServerShops(int _ServerID, MServerShopCollection _ServerShops)
        /// <summary>
        /// ±£´æ·þÎñÆ÷¶ÔÓ¦µÄµêÆÌÐÅÏ¢
        /// </summary>
        /// <param name="_ServerID">·þÎñÆ÷µÄServerID</param>
        /// <param name="_ServerShops">·þÎñÆ÷¶ÔÓ¦µÄµêÆÌÐÅÏ¢¼¯ºÏ</param>
        public void SaveMServerShops(int _ServerID, MServerShopCollection _ServerShops)
        {
            string xmlStr = Common.Utilities.SerializationHelper<MServerShopCollection>.ToXML(_ServerShops);
            DataProvider dp = SqlTools.HelpWWW.DataProviderUse;
            using (IDbConnection conn = dp.GetConnection())
            {
                Common.DataAccess.ORMapping.IConvert ic = dp.GetIConvert();
                Common.DataAccess.ORMapping.Mapping m = ic.GetNewMapping();
                m.AddSql("update ES_Server set ServerShops=N'");
                m.AddSql(xmlStr);
                m.AddSql("' where ServerID=");
                m.AddSql(_ServerID.ToString());
                m.ExecuteNonQuery(conn);
            }
        }
        #endregion

        #region Ìí¼Ó·þÎñÆ÷¶ÔÓ¦µÄµêÆÌÐÅÏ¢ void AddMServerShop(int _ServerID, MServerShop _ServerShop)
        /// <summary>
        /// Ìí¼Ó·þÎñÆ÷¶ÔÓ¦µÄµêÆÌÐÅÏ¢
        /// </summary>
        /// <param name="_ServerID">·þÎñÆ÷µÄServerID</param>
        /// <param name="_ServerShop">·þÎñÆ÷¶ÔÓ¦µÄµêÆÌÐÅÏ¢</param>
        public void AddMServerShop(int _ServerID, MServerShop _ServerShop)
        {
            //update ES_Server set ServerShops.modify('declare namespace mi="http://www.linkedu.com.cn/MServerShop.xsd";  insert (<mi:Shop ShopID="3" ShopName="hopName3" />) as first into (//mi:Shops)[1]') where ServerID=1
            //SELECT ServerID FROM ES_Server WHERE ServerID=1  and ServerShops.exist('declare namespace mi="http://www.linkedu.com.cn/MServerShop.xsd"; //mi:Shops/mi:Shop[@ShopID=4]')=1
            //select ServerShops.value('declare namespace mi="http://www.linkedu.com.cn/MServerShop.xsd"; (//mi:Shops/mi:Shop/@ShopID)[1]=4', 'bit') as ShopID from ES_Server where ServerID=1 if @@rowcount > 0 begin select 1 end
             string xmlStr = Common.Utilities.SerializationHelper<MServerShop>.ToXML(_ServerShop, "mi");
             DataProvider dp = SqlTools.HelpWWW.DataProviderUse;
             using (IDbConnection conn = dp.GetConnection())
             {
                 Common.DataAccess.ORMapping.IConvert ic = dp.GetIConvert();
                 Common.DataAccess.ORMapping.Mapping m = ic.GetNewMapping();
                 m.AddSql("SELECT ServerID FROM ES_Server WHERE ServerID=" + _ServerID.ToString());
                 m.AddSql(" and ServerShops.exist('declare namespace mi=/"http://www.linkedu.com.cn/MServerShop.xsd/"; //mi:Shops/mi:Shop[@ShopID=" + _ServerShop.ShopID.ToString() + "]')=1");
                 m.AddSql(" if @@rowcount = 0 begin ");
                 m.AddSql("update ES_Server set ServerShops.modify('declare namespace mi=/"http://www.linkedu.com.cn/MServerShop.xsd/";  insert (");
                 m.AddSql(xmlStr);
                 m.AddSql(") as first into (//mi:Shops)[1]') where ServerID=" + _ServerID.ToString() + " end");
                 m.ExecuteNonQuery(conn);
             }
        }
        #endregion

        #region ɾ³ý·þÎñÆ÷¶ÔÓ¦µÄµêÆÌÐÅÏ¢ void DeleteMServerShop(int _ServerID, int _ShopID)
        /// <summary>
        /// ɾ³ý·þÎñÆ÷¶ÔÓ¦µÄµêÆÌÐÅÏ¢
        /// </summary>
        /// <param name="_ServerID">·þÎñÆ÷µÄServerID</param>
        /// <param name="_ShopID">µêÆÌID</param>
        public void DeleteMServerShop(int _ServerID, int _ShopID)
        {
            /*
             UPDATE ES_Server
                SET ServerShops.modify('declare namespace mi="http://www.linkedu.com.cn/MServerShop.xsd";
                    delete /mi:Shops/mi:Shop[@ShopID=1]') where ServerID=1
             */
            DataProvider dp = SqlTools.HelpWWW.DataProviderUse;
            using (IDbConnection conn = dp.GetConnection())
            {
                Common.DataAccess.ORMapping.IConvert ic = dp.GetIConvert();
                Common.DataAccess.ORMapping.Mapping m = ic.GetNewMapping();
                m.AddSql("UPDATE ES_Server SET ServerShops.modify('declare namespace mi=/"http://www.linkedu.com.cn/MServerShop.xsd/";delete /mi:Shops/mi:Shop[@ShopID=" + _ShopID + "]') where ServerID=" + _ServerID);
                m.ExecuteNonQuery(conn);
            }
        }
        #endregion

        #region Ð޸ķþÎñÆ÷¶ÔÓ¦µÄµêÆÌÐÅÏ¢ void ModifyMServerShop(int _ServerID, MServerShop _ServerShop)
        /// <summary>
        /// Ð޸ķþÎñÆ÷¶ÔÓ¦µÄµêÆÌÐÅÏ¢
        /// </summary>
        /// <param name="_ServerID">·þÎñÆ÷µÄServerID</param>
        /// <param name="_ServerShop">·þÎñÆ÷¶ÔÓ¦µÄµêÆÌÐÅÏ¢,ÆäÖÐÒÔ_ServerShopµÄShopIDÊôÐÔΪÖ÷¼ü</param>
        public void ModifyMServerShop(int _ServerID, MServerShop _ServerShop)
        {
            //UPDATE ES_Server SET ServerShops.modify('declare namespace mi="http://www.linkedu.com.cn/MServerShop.xsd";replace value of (/mi:Shops/mi:Shop[@ShopID=128780281]/@ShopName)[1] with "ShopNamex"') where ServerID=1
            DataProvider dp = SqlTools.HelpWWW.DataProviderUse;
            using (IDbConnection conn = dp.GetConnection())
            {
                Common.DataAccess.ORMapping.IConvert ic = dp.GetIConvert();
                Common.DataAccess.ORMapping.Mapping m = ic.GetNewMapping();
                m.AddSql("UPDATE ES_Server SET ServerShops.modify('declare namespace mi=/"http://www.linkedu.com.cn/MServerShop.xsd/";replace value of (/mi:Shops/mi:Shop[@ShopID=" + _ServerShop.ShopID + "]/@ShopName)[1] with /"" + _ServerShop.ShopName + "/"') where ServerID=" + _ServerID);
                m.ExecuteNonQuery(conn);
            }
        }
        #endregion


        #endregion

        #endregion

        #region Ôöɾ¸Ä
        #region Ìí¼Ó·þÎñÆ÷ÐÅÏ¢ int Add(int _ServerID, string _ServerName, string _IP, string _DomainName, string _Dir, string _Url, int _ServerGroupID)
        /// <summary>
        /// Ìí¼Ó·þÎñÆ÷ÐÅÏ¢
        /// </summary>
        /// <param name="_ServerID">·þÎñÆ÷ID</param>
        /// <param name="_ServerName">·þÎñÆ÷Ãû³Æ</param>
        /// <param name="_IP">·þÎñÆ÷IP</param>
        /// <param name="_DomainName">·þÎñÆ÷ÓòÃû</param>
        /// <param name="_Dir">Îļþ´æ·ÅĿ¼</param>
        /// <param name="_Url">Îļþ´æ·ÅUrl</param>
        /// <param name="_ServerGroupID">¶ÔÓ¦µÄ·þÎñÆ÷ȺID</param>
        /// <param name="_ServerShops">·þÎñÆ÷¶ÔÓ¦µÄµêÆÌÐÅÏ¢</param>
        /// <returns>мӷþÎñÆ÷ÊÇ·ñ³É¹¦</returns>
        public bool Add(int _ServerID, string _ServerName, string _IP, string _DomainName, string _Dir, string _Url, int _ServerGroupID)
        {
             DataProvider dp = SqlTools.HelpWWW.DataProviderUse;
             using (IDbConnection conn = dp.GetConnection())
             {
                 Common.DataAccess.ORMapping.IConvert ic = dp.GetIConvert();
                 Common.DataAccess.ORMapping.Mapping m = ic.GetNewMapping();
                 Common.Utilities.ListDic<string, object> ld = new Common.Utilities.ListDic<string, object>();
                 ld.Add("ServerID", _ServerID);
                 ld.Add("ServerName", _ServerName);
                 ld.Add("IP", _IP);
                 ld.Add("DomainName", _DomainName);
                 ld.Add("Dir", _Dir);
                 ld.Add("Url", _Url);
                 ld.Add("ServerGroupID", _ServerGroupID);
                 m.Insert(ld, "ES_Server");
                 return m.ExecuteNonQuery(conn) > 0;
             }
        }
        #endregion

        #region Ð޸ķþÎñÆ÷ÐÅÏ¢ bool Modify(int _ServerID, string _ServerName, string _IP, string _DomainName, string _Dir, string _Url, int _ServerGroupID)
        /// <summary>
        /// Ð޸ķþÎñÆ÷ÐÅÏ¢
        /// </summary>
        /// <param name="_ServerID">·þÎñÆ÷ID</param>
        /// <param name="_ServerName">·þÎñÆ÷Ãû³Æ</param>
        /// <param name="_IP">·þÎñÆ÷IP</param>
        /// <param name="_DomainName">·þÎñÆ÷ÓòÃû</param>
        /// <param name="_Dir">Îļþ´æ·ÅĿ¼</param>
        /// <param name="_Url">Îļþ´æ·ÅUrl</param>
        /// <param name="_ServerGroupID">¶ÔÓ¦µÄ·þÎñÆ÷ȺID</param>
        /// <param name="_ServerShops">·þÎñÆ÷¶ÔÓ¦µÄµêÆÌÐÅÏ¢</param>
        /// <returns>ÊÇ·ñ³É¹¦</returns>
        public bool Modify(int _ServerID, string _ServerName, string _IP, string _DomainName, string _Dir, string _Url, int _ServerGroupID)
        {
            DataProvider dp = SqlTools.HelpWWW.DataProviderUse;
            using (IDbConnection conn = dp.GetConnection())
            {
                Common.DataAccess.ORMapping.IConvert ic = dp.GetIConvert();
                Common.DataAccess.ORMapping.Mapping m = ic.GetNewMapping();
                Common.Utilities.ListDic<string, object> ld = new Common.Utilities.ListDic<string, object>();
                ld.Add("ServerName", _ServerName);
                ld.Add("IP", _IP);
                ld.Add("DomainName", _DomainName);
                ld.Add("Dir", _Dir);
                ld.Add("Url", _Url);
                ld.Add("ServerGroupID", _ServerGroupID);
                m.Update(ld, "ES_Server");
                m.AddSql(" where ServerID=");
                m.AddSql("ServerID", _ServerID);

                return m.ExecuteNonQuery(conn) > 0;
            }
        }
        #endregion

        #region ɾ³ý·þÎñÆ÷ÐÅÏ¢ bool Delete(int _ServerID)
        /// <summary>
        /// ɾ³ý·þÎñÆ÷ÐÅÏ¢
        /// </summary>
        /// <param name="_ServerID">·þÎñÆ÷µÄServerID</param>
        /// <returns>ÊÇ·ñ³É¹¦</returns>
        public bool Delete(int _ServerID)
        {
            DataProvider dp = SqlTools.HelpWWW.DataProviderUse;
            using (IDbConnection conn = dp.GetConnection())
            {
                Common.DataAccess.ORMapping.IConvert ic = dp.GetIConvert();
                Common.DataAccess.ORMapping.Mapping m = ic.GetNewMapping();
                m.Delete("ES_Server");
                m.AddSql(" where ServerID=");
                m.AddSql("ServerID", _ServerID);

                return m.ExecuteNonQuery(conn) > 0;
            }
        }
        #endregion
        #endregion

        #region µÃµ½ÆäËü
        #region µÃµ½´Ë·þÎñÆ÷ËùÊô·þÎñÆ÷ȺÐÅÏ¢ MServerGroup GetServerGroup(int _ServerID)
        /// <summary>
        /// µÃµ½´Ë·þÎñÆ÷ËùÊô·þÎñÆ÷ȺÐÅÏ¢
        /// </summary>
        /// <param name="_ServerID">·þÎñÆ÷ID</param>
        /// <returns>µÃµ½´Ë·þÎñÆ÷ËùÊô·þÎñÆ÷ȺÐÅÏ¢</returns>
        public MServerGroup GetServerGroup(int _ServerID)
        {
            DataProvider dp = SqlTools.HelpWWW.DataProviderUse;
            using (IDbConnection conn = dp.GetConnection())
            {
                Common.DataAccess.ORMapping.IConvert ic = dp.GetIConvert();
                Common.DataAccess.ORMapping.Mapping m = ic.GetNewMapping();
                m.AddSql("select * from ES_ServerGroup where ServerGroupID = (select ServerGroupID from ES_Server where ServerID=");
                m.AddSql("ServerID", _ServerID);
                m.AddSql(")");
                using (IDataReader idr = m.ExecuteReader(conn))
                {
                    return Common.Entity.ModelEntityHelp<MServerGroup>.Get_IList(idr)[0];
                }
            }
        }
        #endregion
        #endregion

        #endregion

        #region static
        /// <summary>
        /// ¹¤³§·½·¨µÃµ½DServer¶ÔÏó
        /// </summary>
        /// <returns>DServer¶ÔÏó</returns>
        public static DServer Factory()
        {
            return Common.Singleton.Provider<DServer>.Instance;
        }
        #endregion

    }

    /// <summary>
    /// ·þÎñÆ÷ȺÐÅÏ¢Êý¾Ý·ÃÎʲã
    /// </summary>
    public class DServerGroup
    {
        #region constructor
        public DServerGroup()
        {
        }
        #endregion

     &