<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom"><title type="text">博客园_新生命开发团队</title><subtitle type="text">我不相信神话，我只相信汗水！我不相信命运，我只相信双手！QQ群：1600800</subtitle><id>http://feed.cnblogs.com/blog/u/23151/rss</id><updated>2012-05-28T02:57:45Z</updated><author><name>大石头</name><uri>http://www.cnblogs.com/nnhy/</uri></author><generator>feed.cnblogs.com</generator><link rel="alternate" type="text/html" href="http://www.cnblogs.com/nnhy/"/><link rel="self" type="application/atom+xml" href="http://feed.cnblogs.com/blog/u/23151/rss"/><entry><id>http://www.cnblogs.com/nnhy/archive/2012/05/10/2493859.html</id><title type="text">XCode新增数据转换功能（导数据）</title><summary type="text">用法： ? 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 DAL.AddConnStr("xxgk", "Data Source=192.168.1.21;Initial Catalog=信息公开;user id=sa;password=Pass@word", null, "mssql"); var dal = DAL.Create...</summary><published>2012-05-10T02:19:00Z</published><updated>2012-05-10T02:19:00Z</updated><author><name>大石头</name><uri>http://www.cnblogs.com/nnhy/</uri></author><link rel="alternate" href="http://www.cnblogs.com/nnhy/archive/2012/05/10/2493859.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/nnhy/archive/2012/05/10/2493859.html"/><content type="html">用法：&lt;br&gt; &lt;div&gt; &lt;div id="highlighter_557998" class="syntaxhighlighter notranslate csharp"&gt; &lt;div class="toolbar"&gt;&lt;span&gt;&lt;a class="toolbar_item command_help help" href="http://bbs.53wb.com/#"&gt;?&lt;/a&gt;&lt;/span&gt;&lt;/div&gt; &lt;table border="0" cellspacing="0" cellpadding="0"&gt; &lt;tbody&gt; &lt;tr&gt; &lt;td class="gutter"&gt; &lt;div class="line number1 index0 alt2"&gt;01&lt;/div&gt; &lt;div class="line number2 index1 alt1"&gt;02&lt;/div&gt; &lt;div class="line number3 index2 alt2"&gt;03&lt;/div&gt; &lt;div class="line number4 index3 alt1"&gt;04&lt;/div&gt; &lt;div class="line number5 index4 alt2"&gt;05&lt;/div&gt; &lt;div class="line number6 index5 alt1"&gt;06&lt;/div&gt; &lt;div class="line number7 index6 alt2"&gt;07&lt;/div&gt; &lt;div class="line number8 index7 alt1"&gt;08&lt;/div&gt; &lt;div class="line number9 index8 alt2"&gt;09&lt;/div&gt; &lt;div class="line number10 index9 alt1"&gt;10&lt;/div&gt; &lt;div class="line number11 index10 alt2"&gt;11&lt;/div&gt; &lt;div class="line number12 index11 alt1"&gt;12&lt;/div&gt; &lt;div class="line number13 index12 alt2"&gt;13&lt;/div&gt; &lt;div class="line number14 index13 alt1"&gt;14&lt;/div&gt; &lt;div class="line number15 index14 alt2"&gt;15&lt;/div&gt; &lt;div class="line number16 index15 alt1"&gt;16&lt;/div&gt;&lt;/td&gt; &lt;td class="code"&gt; &lt;div class="container"&gt; &lt;div class="line number1 index0 alt2"&gt;&lt;code class="csharp plain"&gt;DAL.AddConnStr(&lt;/code&gt;&lt;code class="csharp string"&gt;"xxgk"&lt;/code&gt;&lt;code class="csharp plain"&gt;, &lt;/code&gt;&lt;code class="csharp string"&gt;"Data Source=192.168.1.21;Initial Catalog=信息公开;user id=sa;password=Pass@word"&lt;/code&gt;&lt;code class="csharp plain"&gt;, &lt;/code&gt;&lt;code class="csharp keyword"&gt;null&lt;/code&gt;&lt;code class="csharp plain"&gt;, &lt;/code&gt;&lt;code class="csharp string"&gt;"mssql"&lt;/code&gt;&lt;code class="csharp plain"&gt;);&lt;/code&gt;&lt;/div&gt; &lt;div class="line number2 index1 alt1"&gt;&lt;code class="csharp plain"&gt;var dal = DAL.Create(&lt;/code&gt;&lt;code class="csharp string"&gt;"xxgk"&lt;/code&gt;&lt;code class="csharp plain"&gt;);&lt;/code&gt;&lt;/div&gt; &lt;div class="line number3 index2 alt2"&gt;&amp;nbsp;&lt;/div&gt; &lt;div class="line number4 index3 alt1"&gt;&lt;code class="csharp plain"&gt;DAL.AddConnStr(&lt;/code&gt;&lt;code class="csharp string"&gt;"xxgk2"&lt;/code&gt;&lt;code class="csharp plain"&gt;, &lt;/code&gt;&lt;code class="csharp string"&gt;"Data Source=XXGK.db;Version=3;"&lt;/code&gt;&lt;code class="csharp plain"&gt;, &lt;/code&gt;&lt;code class="csharp keyword"&gt;null&lt;/code&gt;&lt;code class="csharp plain"&gt;, &lt;/code&gt;&lt;code class="csharp string"&gt;"sqlite"&lt;/code&gt;&lt;code class="csharp plain"&gt;);&lt;/code&gt;&lt;/div&gt; &lt;div class="line number5 index4 alt2"&gt;&lt;code class="csharp plain"&gt;File.Delete(&lt;/code&gt;&lt;code class="csharp string"&gt;"XXGK.db"&lt;/code&gt;&lt;code class="csharp plain"&gt;);&lt;/code&gt;&lt;/div&gt; &lt;div class="line number6 index5 alt1"&gt;&amp;nbsp;&lt;/div&gt; &lt;div class="line number7 index6 alt2"&gt;&lt;code class="csharp comments"&gt;//DAL.ShowSQL = false;&lt;/code&gt;&lt;/div&gt; &lt;div class="line number8 index7 alt1"&gt;&amp;nbsp;&lt;/div&gt; &lt;div class="line number9 index8 alt2"&gt;&lt;code class="csharp plain"&gt;var etf = &lt;/code&gt;&lt;code class="csharp keyword"&gt;new&lt;/code&gt; &lt;code class="csharp plain"&gt;EntityTransform();&lt;/code&gt;&lt;/div&gt; &lt;div class="line number10 index9 alt1"&gt;&lt;code class="csharp plain"&gt;etf.SrcConn = &lt;/code&gt;&lt;code class="csharp string"&gt;"xxgk"&lt;/code&gt;&lt;code class="csharp plain"&gt;;&lt;/code&gt;&lt;/div&gt; &lt;div class="line number11 index10 alt2"&gt;&lt;code class="csharp plain"&gt;etf.DesConn = &lt;/code&gt;&lt;code class="csharp string"&gt;"xxgk2"&lt;/code&gt;&lt;code class="csharp plain"&gt;;&lt;/code&gt;&lt;/div&gt; &lt;div class="line number12 index11 alt1"&gt;&lt;code class="csharp plain"&gt;etf.AllowInsertIdentity = &lt;/code&gt;&lt;code class="csharp keyword"&gt;true&lt;/code&gt;&lt;code class="csharp plain"&gt;;&lt;/code&gt;&lt;/div&gt; &lt;div class="line number13 index12 alt2"&gt;&lt;code class="csharp plain"&gt;etf.TableNames.Remove(&lt;/code&gt;&lt;code class="csharp string"&gt;"PubInfoLog"&lt;/code&gt;&lt;code class="csharp plain"&gt;);&lt;/code&gt;&lt;/div&gt; &lt;div class="line number14 index13 alt1"&gt;&lt;code class="csharp comments"&gt;//etf.OnTransformTable += (s, e) =&amp;gt; { if (e.Arg.Name == "")e.Arg = null; };&lt;/code&gt;&lt;/div&gt; &lt;div class="line number15 index14 alt2"&gt;&lt;code class="csharp plain"&gt;var rs = etf.Transform();&lt;/code&gt;&lt;/div&gt; &lt;div class="line number16 index15 alt1"&gt;&lt;code class="csharp plain"&gt;Console.WriteLine(&lt;/code&gt;&lt;code class="csharp string"&gt;"共转移：{0}"&lt;/code&gt;&lt;code class="csharp plain"&gt;, rs);&lt;/code&gt;&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;/div&gt;&lt;br&gt;&lt;br&gt;其实你也可以自己实现，XCode内部代码如下：&lt;br&gt; &lt;div&gt; &lt;div id="highlighter_397477" class="syntaxhighlighter notranslate csharp"&gt; &lt;div class="toolbar"&gt;&lt;span&gt;&lt;a class="toolbar_item command_help help" href="http://bbs.53wb.com/#"&gt;?&lt;/a&gt;&lt;/span&gt;&lt;/div&gt; &lt;table border="0" cellspacing="0" cellpadding="0"&gt; &lt;tbody&gt; &lt;tr&gt; &lt;td class="gutter"&gt; &lt;div class="line number1 index0 alt2"&gt;001&lt;/div&gt; &lt;div class="line number2 index1 alt1"&gt;002&lt;/div&gt; &lt;div class="line number3 index2 alt2"&gt;003&lt;/div&gt; &lt;div class="line number4 index3 alt1"&gt;004&lt;/div&gt; &lt;div class="line number5 index4 alt2"&gt;005&lt;/div&gt; &lt;div class="line number6 index5 alt1"&gt;006&lt;/div&gt; &lt;div class="line number7 index6 alt2"&gt;007&lt;/div&gt; &lt;div class="line number8 index7 alt1"&gt;008&lt;/div&gt; &lt;div class="line number9 index8 alt2"&gt;009&lt;/div&gt; &lt;div class="line number10 index9 alt1"&gt;010&lt;/div&gt; &lt;div class="line number11 index10 alt2"&gt;011&lt;/div&gt; &lt;div class="line number12 index11 alt1"&gt;012&lt;/div&gt; &lt;div class="line number13 index12 alt2"&gt;013&lt;/div&gt; &lt;div class="line number14 index13 alt1"&gt;014&lt;/div&gt; &lt;div class="line number15 index14 alt2"&gt;015&lt;/div&gt; &lt;div class="line number16 index15 alt1"&gt;016&lt;/div&gt; &lt;div class="line number17 index16 alt2"&gt;017&lt;/div&gt; &lt;div class="line number18 index17 alt1"&gt;018&lt;/div&gt; &lt;div class="line number19 index18 alt2"&gt;019&lt;/div&gt; &lt;div class="line number20 index19 alt1"&gt;020&lt;/div&gt; &lt;div class="line number21 index20 alt2"&gt;021&lt;/div&gt; &lt;div class="line number22 index21 alt1"&gt;022&lt;/div&gt; &lt;div class="line number23 index22 alt2"&gt;023&lt;/div&gt; &lt;div class="line number24 index23 alt1"&gt;024&lt;/div&gt; &lt;div class="line number25 index24 alt2"&gt;025&lt;/div&gt; &lt;div class="line number26 index25 alt1"&gt;026&lt;/div&gt; &lt;div class="line number27 index26 alt2"&gt;027&lt;/div&gt; &lt;div class="line number28 index27 alt1"&gt;028&lt;/div&gt; &lt;div class="line number29 index28 alt2"&gt;029&lt;/div&gt; &lt;div class="line number30 index29 alt1"&gt;030&lt;/div&gt; &lt;div class="line number31 index30 alt2"&gt;031&lt;/div&gt; &lt;div class="line number32 index31 alt1"&gt;032&lt;/div&gt; &lt;div class="line number33 index32 alt2"&gt;033&lt;/div&gt; &lt;div class="line number34 index33 alt1"&gt;034&lt;/div&gt; &lt;div class="line number35 index34 alt2"&gt;035&lt;/div&gt; &lt;div class="line number36 index35 alt1"&gt;036&lt;/div&gt; &lt;div class="line number37 index36 alt2"&gt;037&lt;/div&gt; &lt;div class="line number38 index37 alt1"&gt;038&lt;/div&gt; &lt;div class="line number39 index38 alt2"&gt;039&lt;/div&gt; &lt;div class="line number40 index39 alt1"&gt;040&lt;/div&gt; &lt;div class="line number41 index40 alt2"&gt;041&lt;/div&gt; &lt;div class="line number42 index41 alt1"&gt;042&lt;/div&gt; &lt;div class="line number43 index42 alt2"&gt;043&lt;/div&gt; &lt;div class="line number44 index43 alt1"&gt;044&lt;/div&gt; &lt;div class="line number45 index44 alt2"&gt;045&lt;/div&gt; &lt;div class="line number46 index45 alt1"&gt;046&lt;/div&gt; &lt;div class="line number47 index46 alt2"&gt;047&lt;/div&gt; &lt;div class="line number48 index47 alt1"&gt;048&lt;/div&gt; &lt;div class="line number49 index48 alt2"&gt;049&lt;/div&gt; &lt;div class="line number50 index49 alt1"&gt;050&lt;/div&gt; &lt;div class="line number51 index50 alt2"&gt;051&lt;/div&gt; &lt;div class="line number52 index51 alt1"&gt;052&lt;/div&gt; &lt;div class="line number53 index52 alt2"&gt;053&lt;/div&gt; &lt;div class="line number54 index53 alt1"&gt;054&lt;/div&gt; &lt;div class="line number55 index54 alt2"&gt;055&lt;/div&gt; &lt;div class="line number56 index55 alt1"&gt;056&lt;/div&gt; &lt;div class="line number57 index56 alt2"&gt;057&lt;/div&gt; &lt;div class="line number58 index57 alt1"&gt;058&lt;/div&gt; &lt;div class="line number59 index58 alt2"&gt;059&lt;/div&gt; &lt;div class="line number60 index59 alt1"&gt;060&lt;/div&gt; &lt;div class="line number61 index60 alt2"&gt;061&lt;/div&gt; &lt;div class="line number62 index61 alt1"&gt;062&lt;/div&gt; &lt;div class="line number63 index62 alt2"&gt;063&lt;/div&gt; &lt;div class="line number64 index63 alt1"&gt;064&lt;/div&gt; &lt;div class="line number65 index64 alt2"&gt;065&lt;/div&gt; &lt;div class="line number66 index65 alt1"&gt;066&lt;/div&gt; &lt;div class="line number67 index66 alt2"&gt;067&lt;/div&gt; &lt;div class="line number68 index67 alt1"&gt;068&lt;/div&gt; &lt;div class="line number69 index68 alt2"&gt;069&lt;/div&gt; &lt;div class="line number70 index69 alt1"&gt;070&lt;/div&gt; &lt;div class="line number71 index70 alt2"&gt;071&lt;/div&gt; &lt;div class="line number72 index71 alt1"&gt;072&lt;/div&gt; &lt;div class="line number73 index72 alt2"&gt;073&lt;/div&gt; &lt;div class="line number74 index73 alt1"&gt;074&lt;/div&gt; &lt;div class="line number75 index74 alt2"&gt;075&lt;/div&gt; &lt;div class="line number76 index75 alt1"&gt;076&lt;/div&gt; &lt;div class="line number77 index76 alt2"&gt;077&lt;/div&gt; &lt;div class="line number78 index77 alt1"&gt;078&lt;/div&gt; &lt;div class="line number79 index78 alt2"&gt;079&lt;/div&gt; &lt;div class="line number80 index79 alt1"&gt;080&lt;/div&gt; &lt;div class="line number81 index80 alt2"&gt;081&lt;/div&gt; &lt;div class="line number82 index81 alt1"&gt;082&lt;/div&gt; &lt;div class="line number83 index82 alt2"&gt;083&lt;/div&gt; &lt;div class="line number84 index83 alt1"&gt;084&lt;/div&gt; &lt;div class="line number85 index84 alt2"&gt;085&lt;/div&gt; &lt;div class="line number86 index85 alt1"&gt;086&lt;/div&gt; &lt;div class="line number87 index86 alt2"&gt;087&lt;/div&gt; &lt;div class="line number88 index87 alt1"&gt;088&lt;/div&gt; &lt;div class="line number89 index88 alt2"&gt;089&lt;/div&gt; &lt;div class="line number90 index89 alt1"&gt;090&lt;/div&gt; &lt;div class="line number91 index90 alt2"&gt;091&lt;/div&gt; &lt;div class="line number92 index91 alt1"&gt;092&lt;/div&gt; &lt;div class="line number93 index92 alt2"&gt;093&lt;/div&gt; &lt;div class="line number94 index93 alt1"&gt;094&lt;/div&gt; &lt;div class="line number95 index94 alt2"&gt;095&lt;/div&gt; &lt;div class="line number96 index95 alt1"&gt;096&lt;/div&gt; &lt;div class="line number97 index96 alt2"&gt;097&lt;/div&gt; &lt;div class="line number98 index97 alt1"&gt;098&lt;/div&gt; &lt;div class="line number99 index98 alt2"&gt;099&lt;/div&gt; &lt;div class="line number100 index99 alt1"&gt;100&lt;/div&gt; &lt;div class="line number101 index100 alt2"&gt;101&lt;/div&gt; &lt;div class="line number102 index101 alt1"&gt;102&lt;/div&gt; &lt;div class="line number103 index102 alt2"&gt;103&lt;/div&gt; &lt;div class="line number104 index103 alt1"&gt;104&lt;/div&gt; &lt;div class="line number105 index104 alt2"&gt;105&lt;/div&gt; &lt;div class="line number106 index105 alt1"&gt;106&lt;/div&gt; &lt;div class="line number107 index106 alt2"&gt;107&lt;/div&gt; &lt;div class="line number108 index107 alt1"&gt;108&lt;/div&gt; &lt;div class="line number109 index108 alt2"&gt;109&lt;/div&gt; &lt;div class="line number110 index109 alt1"&gt;110&lt;/div&gt; &lt;div class="line number111 index110 alt2"&gt;111&lt;/div&gt; &lt;div class="line number112 index111 alt1"&gt;112&lt;/div&gt; &lt;div class="line number113 index112 alt2"&gt;113&lt;/div&gt; &lt;div class="line number114 index113 alt1"&gt;114&lt;/div&gt; &lt;div class="line number115 index114 alt2"&gt;115&lt;/div&gt; &lt;div class="line number116 index115 alt1"&gt;116&lt;/div&gt; &lt;div class="line number117 index116 alt2"&gt;117&lt;/div&gt; &lt;div class="line number118 index117 alt1"&gt;118&lt;/div&gt; &lt;div class="line number119 index118 alt2"&gt;119&lt;/div&gt; &lt;div class="line number120 index119 alt1"&gt;120&lt;/div&gt; &lt;div class="line number121 index120 alt2"&gt;121&lt;/div&gt; &lt;div class="line number122 index121 alt1"&gt;122&lt;/div&gt; &lt;div class="line number123 index122 alt2"&gt;123&lt;/div&gt; &lt;div class="line number124 index123 alt1"&gt;124&lt;/div&gt; &lt;div class="line number125 index124 alt2"&gt;125&lt;/div&gt; &lt;div class="line number126 index125 alt1"&gt;126&lt;/div&gt; &lt;div class="line number127 index126 alt2"&gt;127&lt;/div&gt; &lt;div class="line number128 index127 alt1"&gt;128&lt;/div&gt; &lt;div class="line number129 index128 alt2"&gt;129&lt;/div&gt; &lt;div class="line number130 index129 alt1"&gt;130&lt;/div&gt; &lt;div class="line number131 index130 alt2"&gt;131&lt;/div&gt; &lt;div class="line number132 index131 alt1"&gt;132&lt;/div&gt; &lt;div class="line number133 index132 alt2"&gt;133&lt;/div&gt; &lt;div class="line number134 index133 alt1"&gt;134&lt;/div&gt; &lt;div class="line number135 index134 alt2"&gt;135&lt;/div&gt; &lt;div class="line number136 index135 alt1"&gt;136&lt;/div&gt; &lt;div class="line number137 index136 alt2"&gt;137&lt;/div&gt; &lt;div class="line number138 index137 alt1"&gt;138&lt;/div&gt; &lt;div class="line number139 index138 alt2"&gt;139&lt;/div&gt; &lt;div class="line number140 index139 alt1"&gt;140&lt;/div&gt; &lt;div class="line number141 index140 alt2"&gt;141&lt;/div&gt; &lt;div class="line number142 index141 alt1"&gt;142&lt;/div&gt; &lt;div class="line number143 index142 alt2"&gt;143&lt;/div&gt; &lt;div class="line number144 index143 alt1"&gt;144&lt;/div&gt; &lt;div class="line number145 index144 alt2"&gt;145&lt;/div&gt; &lt;div class="line number146 index145 alt1"&gt;146&lt;/div&gt; &lt;div class="line number147 index146 alt2"&gt;147&lt;/div&gt; &lt;div class="line number148 index147 alt1"&gt;148&lt;/div&gt; &lt;div class="line number149 index148 alt2"&gt;149&lt;/div&gt; &lt;div class="line number150 index149 alt1"&gt;150&lt;/div&gt; &lt;div class="line number151 index150 alt2"&gt;151&lt;/div&gt; &lt;div class="line number152 index151 alt1"&gt;152&lt;/div&gt; &lt;div class="line number153 index152 alt2"&gt;153&lt;/div&gt; &lt;div class="line number154 index153 alt1"&gt;154&lt;/div&gt; &lt;div class="line number155 index154 alt2"&gt;155&lt;/div&gt; &lt;div class="line number156 index155 alt1"&gt;156&lt;/div&gt; &lt;div class="line number157 index156 alt2"&gt;157&lt;/div&gt; &lt;div class="line number158 index157 alt1"&gt;158&lt;/div&gt; &lt;div class="line number159 index158 alt2"&gt;159&lt;/div&gt; &lt;div class="line number160 index159 alt1"&gt;160&lt;/div&gt; &lt;div class="line number161 index160 alt2"&gt;161&lt;/div&gt; &lt;div class="line number162 index161 alt1"&gt;162&lt;/div&gt; &lt;div class="line number163 index162 alt2"&gt;163&lt;/div&gt; &lt;div class="line number164 index163 alt1"&gt;164&lt;/div&gt; &lt;div class="line number165 index164 alt2"&gt;165&lt;/div&gt; &lt;div class="line number166 index165 alt1"&gt;166&lt;/div&gt;&lt;/td&gt; &lt;td class="code"&gt; &lt;div class="container"&gt; &lt;div class="line number1 index0 alt2"&gt;&lt;code class="csharp keyword"&gt;using&lt;/code&gt; &lt;code class="csharp plain"&gt;System;&lt;/code&gt;&lt;/div&gt; &lt;div class="line number2 index1 alt1"&gt;&lt;code class="csharp keyword"&gt;using&lt;/code&gt; &lt;code class="csharp plain"&gt;System.Collections.Generic;&lt;/code&gt;&lt;/div&gt; &lt;div class="line number3 index2 alt2"&gt;&lt;code class="csharp keyword"&gt;using&lt;/code&gt; &lt;code class="csharp plain"&gt;NewLife;&lt;/code&gt;&lt;/div&gt; &lt;div class="line number4 index3 alt1"&gt;&lt;code class="csharp keyword"&gt;using&lt;/code&gt; &lt;code class="csharp plain"&gt;NewLife.Collections;&lt;/code&gt;&lt;/div&gt; &lt;div class="line number5 index4 alt2"&gt;&lt;code class="csharp keyword"&gt;using&lt;/code&gt; &lt;code class="csharp plain"&gt;NewLife.Log;&lt;/code&gt;&lt;/div&gt; &lt;div class="line number6 index5 alt1"&gt;&lt;code class="csharp preprocessor"&gt;#if !NET4&lt;/code&gt;&lt;/div&gt; &lt;div class="line number7 index6 alt2"&gt;&lt;code class="csharp keyword"&gt;using&lt;/code&gt; &lt;code class="csharp plain"&gt;NewLife.Reflection;&lt;/code&gt;&lt;/div&gt; &lt;div class="line number8 index7 alt1"&gt;&lt;code class="csharp preprocessor"&gt;#endif&lt;/code&gt;&lt;/div&gt; &lt;div class="line number9 index8 alt2"&gt;&lt;code class="csharp keyword"&gt;using&lt;/code&gt; &lt;code class="csharp plain"&gt;XCode.DataAccessLayer;&lt;/code&gt;&lt;/div&gt; &lt;div class="line number10 index9 alt1"&gt;&amp;nbsp;&lt;/div&gt; &lt;div class="line number11 index10 alt2"&gt;&lt;code class="csharp keyword"&gt;namespace&lt;/code&gt; &lt;code class="csharp plain"&gt;XCode.Transform&lt;/code&gt;&lt;/div&gt; &lt;div class="line number12 index11 alt1"&gt;&lt;code class="csharp plain"&gt;{&lt;/code&gt;&lt;/div&gt; &lt;div class="line number13 index12 alt2"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/code&gt;&lt;code class="csharp color1"&gt;/// &amp;lt;summary&amp;gt;实体转换&amp;lt;/summary&amp;gt;&lt;/code&gt;&lt;/div&gt; &lt;div class="line number14 index13 alt1"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/code&gt;&lt;code class="csharp keyword"&gt;public&lt;/code&gt; &lt;code class="csharp keyword"&gt;class&lt;/code&gt; &lt;code class="csharp plain"&gt;EntityTransform&lt;/code&gt;&lt;/div&gt; &lt;div class="line number15 index14 alt2"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/code&gt;&lt;code class="csharp plain"&gt;{&lt;/code&gt;&lt;/div&gt; &lt;div class="line number16 index15 alt1"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/code&gt;&lt;code class="csharp plain"&gt;#region 属性&lt;/code&gt;&lt;/div&gt; &lt;div class="line number17 index16 alt2"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/code&gt;&lt;code class="csharp keyword"&gt;private&lt;/code&gt; &lt;code class="csharp plain"&gt;String _SrcConn;&lt;/code&gt;&lt;/div&gt; &lt;div class="line number18 index17 alt1"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/code&gt;&lt;code class="csharp color1"&gt;/// &amp;lt;summary&amp;gt;源&amp;lt;/summary&amp;gt;&lt;/code&gt;&lt;/div&gt; &lt;div class="line number19 index18 alt2"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/code&gt;&lt;code class="csharp keyword"&gt;public&lt;/code&gt; &lt;code class="csharp plain"&gt;String SrcConn { &lt;/code&gt;&lt;code class="csharp keyword"&gt;get&lt;/code&gt; &lt;code class="csharp plain"&gt;{ &lt;/code&gt;&lt;code class="csharp keyword"&gt;return&lt;/code&gt; &lt;code class="csharp plain"&gt;_SrcConn; } &lt;/code&gt;&lt;code class="csharp keyword"&gt;set&lt;/code&gt; &lt;code class="csharp plain"&gt;{ _SrcConn = value; } }&lt;/code&gt;&lt;/div&gt; &lt;div class="line number20 index19 alt1"&gt;&amp;nbsp;&lt;/div&gt; &lt;div class="line number21 index20 alt2"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/code&gt;&lt;code class="csharp keyword"&gt;private&lt;/code&gt; &lt;code class="csharp plain"&gt;String _DesConn;&lt;/code&gt;&lt;/div&gt; &lt;div class="line number22 index21 alt1"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/code&gt;&lt;code class="csharp color1"&gt;/// &amp;lt;summary&amp;gt;目的&amp;lt;/summary&amp;gt;&lt;/code&gt;&lt;/div&gt; &lt;div class="line number23 index22 alt2"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/code&gt;&lt;code class="csharp keyword"&gt;public&lt;/code&gt; &lt;code class="csharp plain"&gt;String DesConn { &lt;/code&gt;&lt;code class="csharp keyword"&gt;get&lt;/code&gt; &lt;code class="csharp plain"&gt;{ &lt;/code&gt;&lt;code class="csharp keyword"&gt;return&lt;/code&gt; &lt;code class="csharp plain"&gt;_DesConn; } &lt;/code&gt;&lt;code class="csharp keyword"&gt;set&lt;/code&gt; &lt;code class="csharp plain"&gt;{ _DesConn = value; } }&lt;/code&gt;&lt;/div&gt; &lt;div class="line number24 index23 alt1"&gt;&amp;nbsp;&lt;/div&gt; &lt;div class="line number25 index24 alt2"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/code&gt;&lt;code class="csharp keyword"&gt;private&lt;/code&gt; &lt;code class="csharp plain"&gt;ICollection&amp;lt;String&amp;gt; _TableNames;&lt;/code&gt;&lt;/div&gt; &lt;div class="line number26 index25 alt1"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/code&gt;&lt;code class="csharp color1"&gt;/// &amp;lt;summary&amp;gt;要导数据的表，为空表示全部&amp;lt;/summary&amp;gt;&lt;/code&gt;&lt;/div&gt; &lt;div class="line number27 index26 alt2"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/code&gt;&lt;code class="csharp keyword"&gt;public&lt;/code&gt; &lt;code class="csharp plain"&gt;ICollection&amp;lt;String&amp;gt; TableNames&lt;/code&gt;&lt;/div&gt; &lt;div class="line number28 index27 alt1"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/code&gt;&lt;code class="csharp plain"&gt;{&lt;/code&gt;&lt;/div&gt; &lt;div class="line number29 index28 alt2"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/code&gt;&lt;code class="csharp keyword"&gt;get&lt;/code&gt;&lt;/div&gt; &lt;div class="line number30 index29 alt1"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/code&gt;&lt;code class="csharp plain"&gt;{&lt;/code&gt;&lt;/div&gt; &lt;div class="line number31 index30 alt2"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/code&gt;&lt;code class="csharp keyword"&gt;if&lt;/code&gt; &lt;code class="csharp plain"&gt;(_TableNames == &lt;/code&gt;&lt;code class="csharp keyword"&gt;null&lt;/code&gt;&lt;code class="csharp plain"&gt;)&lt;/code&gt;&lt;/div&gt; &lt;div class="line number32 index31 alt1"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/code&gt;&lt;code class="csharp plain"&gt;{&lt;/code&gt;&lt;/div&gt; &lt;div class="line number33 index32 alt2"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/code&gt;&lt;code class="csharp plain"&gt;_TableNames = &lt;/code&gt;&lt;code class="csharp keyword"&gt;new&lt;/code&gt; &lt;code class="csharp plain"&gt;HashSet&amp;lt;String&amp;gt;(StringComparer.OrdinalIgnoreCase);&lt;/code&gt;&lt;/div&gt; &lt;div class="line number34 index33 alt1"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/code&gt;&lt;code class="csharp keyword"&gt;if&lt;/code&gt; &lt;code class="csharp plain"&gt;(!String.IsNullOrEmpty(SrcConn))&lt;/code&gt;&lt;/div&gt; &lt;div class="line number35 index34 alt2"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/code&gt;&lt;code class="csharp plain"&gt;{&lt;/code&gt;&lt;/div&gt; &lt;div class="line number36 index35 alt1"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/code&gt;&lt;code class="csharp keyword"&gt;foreach&lt;/code&gt; &lt;code class="csharp plain"&gt;(var item &lt;/code&gt;&lt;code class="csharp keyword"&gt;in&lt;/code&gt; &lt;code class="csharp plain"&gt;DAL.Create(SrcConn).Tables)&lt;/code&gt;&lt;/div&gt; &lt;div class="line number37 index36 alt2"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/code&gt;&lt;code class="csharp plain"&gt;{&lt;/code&gt;&lt;/div&gt; &lt;div class="line number38 index37 alt1"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/code&gt;&lt;code class="csharp plain"&gt;_TableNames.Add(item.Name);&lt;/code&gt;&lt;/div&gt; &lt;div class="line number39 index38 alt2"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/code&gt;&lt;code class="csharp plain"&gt;}&lt;/code&gt;&lt;/div&gt; &lt;div class="line number40 index39 alt1"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/code&gt;&lt;code class="csharp plain"&gt;}&lt;/code&gt;&lt;/div&gt; &lt;div class="line number41 index40 alt2"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/code&gt;&lt;code class="csharp plain"&gt;}&lt;/code&gt;&lt;/div&gt; &lt;div class="line number42 index41 alt1"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/code&gt;&lt;code class="csharp keyword"&gt;return&lt;/code&gt; &lt;code class="csharp plain"&gt;_TableNames;&lt;/code&gt;&lt;/div&gt; &lt;div class="line number43 index42 alt2"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/code&gt;&lt;code class="csharp plain"&gt;}&lt;/code&gt;&lt;/div&gt; &lt;div class="line number44 index43 alt1"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/code&gt;&lt;code class="csharp keyword"&gt;set&lt;/code&gt; &lt;code class="csharp plain"&gt;{ _TableNames = value; }&lt;/code&gt;&lt;/div&gt; &lt;div class="line number45 index44 alt2"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/code&gt;&lt;code class="csharp plain"&gt;}&lt;/code&gt;&lt;/div&gt; &lt;div class="line number46 index45 alt1"&gt;&amp;nbsp;&lt;/div&gt; &lt;div class="line number47 index46 alt2"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/code&gt;&lt;code class="csharp keyword"&gt;private&lt;/code&gt; &lt;code class="csharp plain"&gt;Int32 _BatchSize = 1000;&lt;/code&gt;&lt;/div&gt; &lt;div class="line number48 index47 alt1"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/code&gt;&lt;code class="csharp color1"&gt;/// &amp;lt;summary&amp;gt;每批处理多少行数据，默认1000&amp;lt;/summary&amp;gt;&lt;/code&gt;&lt;/div&gt; &lt;div class="line number49 index48 alt2"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/code&gt;&lt;code class="csharp keyword"&gt;public&lt;/code&gt; &lt;code class="csharp plain"&gt;Int32 BatchSize { &lt;/code&gt;&lt;code class="csharp keyword"&gt;get&lt;/code&gt; &lt;code class="csharp plain"&gt;{ &lt;/code&gt;&lt;code class="csharp keyword"&gt;return&lt;/code&gt; &lt;code class="csharp plain"&gt;_BatchSize; } &lt;/code&gt;&lt;code class="csharp keyword"&gt;set&lt;/code&gt; &lt;code class="csharp plain"&gt;{ _BatchSize = value; } }&lt;/code&gt;&lt;/div&gt; &lt;div class="line number50 index49 alt1"&gt;&amp;nbsp;&lt;/div&gt; &lt;div class="line number51 index50 alt2"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/code&gt;&lt;code class="csharp keyword"&gt;private&lt;/code&gt; &lt;code class="csharp plain"&gt;Boolean _AllowInsertIdentity;&lt;/code&gt;&lt;/div&gt; &lt;div class="line number52 index51 alt1"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/code&gt;&lt;code class="csharp color1"&gt;/// &amp;lt;summary&amp;gt;是否允许插入自增列&amp;lt;/summary&amp;gt;&lt;/code&gt;&lt;/div&gt; &lt;div class="line number53 index52 alt2"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/code&gt;&lt;code class="csharp keyword"&gt;public&lt;/code&gt; &lt;code class="csharp plain"&gt;Boolean AllowInsertIdentity { &lt;/code&gt;&lt;code class="csharp keyword"&gt;get&lt;/code&gt; &lt;code class="csharp plain"&gt;{ &lt;/code&gt;&lt;code class="csharp keyword"&gt;return&lt;/code&gt; &lt;code class="csharp plain"&gt;_AllowInsertIdentity; } &lt;/code&gt;&lt;code class="csharp keyword"&gt;set&lt;/code&gt; &lt;code class="csharp plain"&gt;{ _AllowInsertIdentity = value; } }&lt;/code&gt;&lt;/div&gt; &lt;div class="line number54 index53 alt1"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/code&gt;&lt;code class="csharp plain"&gt;#endregion&lt;/code&gt;&lt;/div&gt; &lt;div class="line number55 index54 alt2"&gt;&amp;nbsp;&lt;/div&gt; &lt;div class="line number56 index55 alt1"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/code&gt;&lt;code class="csharp plain"&gt;#region 方法&lt;/code&gt;&lt;/div&gt; &lt;div class="line number57 index56 alt2"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/code&gt;&lt;code class="csharp color1"&gt;/// &amp;lt;summary&amp;gt;把一个链接的数据全部导入到另一个链接&amp;lt;/summary&amp;gt;&lt;/code&gt;&lt;/div&gt; &lt;div class="line number58 index57 alt1"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/code&gt;&lt;code class="csharp color1"&gt;/// &amp;lt;returns&amp;gt;&amp;lt;/returns&amp;gt;&lt;/code&gt;&lt;/div&gt; &lt;div class="line number59 index58 alt2"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/code&gt;&lt;code class="csharp keyword"&gt;public&lt;/code&gt; &lt;code class="csharp plain"&gt;Int32 Transform()&lt;/code&gt;&lt;/div&gt; &lt;div class="line number60 index59 alt1"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/code&gt;&lt;code class="csharp plain"&gt;{&lt;/code&gt;&lt;/div&gt; &lt;div class="line number61 index60 alt2"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/code&gt;&lt;code class="csharp plain"&gt;var dal = DAL.Create(SrcConn);&lt;/code&gt;&lt;/div&gt; &lt;div class="line number62 index61 alt1"&gt;&amp;nbsp;&lt;/div&gt; &lt;div class="line number63 index62 alt2"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/code&gt;&lt;code class="csharp plain"&gt;var tables = dal.Tables;&lt;/code&gt;&lt;/div&gt; &lt;div class="line number64 index63 alt1"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/code&gt;&lt;code class="csharp plain"&gt;tables.RemoveAll(t =&amp;gt; t.IsView);&lt;/code&gt;&lt;/div&gt; &lt;div class="line number65 index64 alt2"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/code&gt;&lt;code class="csharp plain"&gt;var tns = TableNames;&lt;/code&gt;&lt;/div&gt; &lt;div class="line number66 index65 alt1"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/code&gt;&lt;code class="csharp keyword"&gt;if&lt;/code&gt; &lt;code class="csharp plain"&gt;(tns != &lt;/code&gt;&lt;code class="csharp keyword"&gt;null&lt;/code&gt; &lt;code class="csharp plain"&gt;&amp;amp;&amp;amp; tns.Count &amp;gt; 0) tables.RemoveAll(t =&amp;gt; !tns.Contains(t.Name) &amp;amp;&amp;amp; !tns.Contains(t.Alias));&lt;/code&gt;&lt;/div&gt; &lt;div class="line number67 index66 alt2"&gt;&amp;nbsp;&lt;/div&gt; &lt;div class="line number68 index67 alt1"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/code&gt;&lt;code class="csharp plain"&gt;var total = 0;&lt;/code&gt;&lt;/div&gt; &lt;div class="line number69 index68 alt2"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/code&gt;&lt;code class="csharp keyword"&gt;foreach&lt;/code&gt; &lt;code class="csharp plain"&gt;(var item &lt;/code&gt;&lt;code class="csharp keyword"&gt;in&lt;/code&gt; &lt;code class="csharp plain"&gt;tables)&lt;/code&gt;&lt;/div&gt; &lt;div class="line number70 index69 alt1"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/code&gt;&lt;code class="csharp plain"&gt;{&lt;/code&gt;&lt;/div&gt; &lt;div class="line number71 index70 alt2"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/code&gt;&lt;code class="csharp keyword"&gt;if&lt;/code&gt; &lt;code class="csharp plain"&gt;(OnTransformTable != &lt;/code&gt;&lt;code class="csharp keyword"&gt;null&lt;/code&gt;&lt;code class="csharp plain"&gt;)&lt;/code&gt;&lt;/div&gt; &lt;div class="line number72 index71 alt1"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/code&gt;&lt;code class="csharp plain"&gt;{&lt;/code&gt;&lt;/div&gt; &lt;div class="line number73 index72 alt2"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/code&gt;&lt;code class="csharp plain"&gt;var e = &lt;/code&gt;&lt;code class="csharp keyword"&gt;new&lt;/code&gt; &lt;code class="csharp plain"&gt;EventArgs&amp;lt;IDataTable&amp;gt;(item);&lt;/code&gt;&lt;/div&gt; &lt;div class="line number74 index73 alt1"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/code&gt;&lt;code class="csharp plain"&gt;OnTransformTable(&lt;/code&gt;&lt;code class="csharp keyword"&gt;this&lt;/code&gt;&lt;code class="csharp plain"&gt;, e);&lt;/code&gt;&lt;/div&gt; &lt;div class="line number75 index74 alt2"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/code&gt;&lt;code class="csharp keyword"&gt;if&lt;/code&gt; &lt;code class="csharp plain"&gt;(e.Arg == &lt;/code&gt;&lt;code class="csharp keyword"&gt;null&lt;/code&gt;&lt;code class="csharp plain"&gt;) &lt;/code&gt;&lt;code class="csharp keyword"&gt;continue&lt;/code&gt;&lt;code class="csharp plain"&gt;;&lt;/code&gt;&lt;/div&gt; &lt;div class="line number76 index75 alt1"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/code&gt;&lt;code class="csharp plain"&gt;}&lt;/code&gt;&lt;/div&gt; &lt;div class="line number77 index76 alt2"&gt;&amp;nbsp;&lt;/div&gt; &lt;div class="line number78 index77 alt1"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/code&gt;&lt;code class="csharp plain"&gt;total += TransformTable(dal.CreateOperate(item.Name));&lt;/code&gt;&lt;/div&gt; &lt;div class="line number79 index78 alt2"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/code&gt;&lt;code class="csharp plain"&gt;}&lt;/code&gt;&lt;/div&gt; &lt;div class="line number80 index79 alt1"&gt;&amp;nbsp;&lt;/div&gt; &lt;div class="line number81 index80 alt2"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/code&gt;&lt;code class="csharp keyword"&gt;return&lt;/code&gt; &lt;code class="csharp plain"&gt;total;&lt;/code&gt;&lt;/div&gt; &lt;div class="line number82 index81 alt1"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/code&gt;&lt;code class="csharp plain"&gt;}&lt;/code&gt;&lt;/div&gt; &lt;div class="line number83 index82 alt2"&gt;&amp;nbsp;&lt;/div&gt; &lt;div class="line number84 index83 alt1"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/code&gt;&lt;code class="csharp color1"&gt;/// &amp;lt;summary&amp;gt;把一个表的数据全部导入到另一个表&amp;lt;/summary&amp;gt;&lt;/code&gt;&lt;/div&gt; &lt;div class="line number85 index84 alt2"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/code&gt;&lt;code class="csharp color1"&gt;/// &amp;lt;param name="eop"&amp;gt;实体操作者。&amp;lt;/param&amp;gt;&lt;/code&gt;&lt;/div&gt; &lt;div class="line number86 index85 alt1"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/code&gt;&lt;code class="csharp color1"&gt;/// &amp;lt;param name="getData"&amp;gt;用于获取数据的委托&amp;lt;/param&amp;gt;&lt;/code&gt;&lt;/div&gt; &lt;div class="line number87 index86 alt2"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/code&gt;&lt;code class="csharp color1"&gt;/// &amp;lt;returns&amp;gt;&amp;lt;/returns&amp;gt;&lt;/code&gt;&lt;/div&gt; &lt;div class="line number88 index87 alt1"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/code&gt;&lt;code class="csharp keyword"&gt;public&lt;/code&gt; &lt;code class="csharp plain"&gt;Int32 TransformTable(IEntityOperate eop, Func&amp;lt;Int32, Int32, IEntityList&amp;gt; getData = &lt;/code&gt;&lt;code class="csharp keyword"&gt;null&lt;/code&gt;&lt;code class="csharp plain"&gt;)&lt;/code&gt;&lt;/div&gt; &lt;div class="line number89 index88 alt2"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/code&gt;&lt;code class="csharp plain"&gt;{&lt;/code&gt;&lt;/div&gt; &lt;div class="line number90 index89 alt1"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/code&gt;&lt;code class="csharp plain"&gt;var name = eop.TableName;&lt;/code&gt;&lt;/div&gt; &lt;div class="line number91 index90 alt2"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/code&gt;&lt;code class="csharp plain"&gt;var count = eop.Count;&lt;/code&gt;&lt;/div&gt; &lt;div class="line number92 index91 alt1"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/code&gt;&lt;code class="csharp keyword"&gt;if&lt;/code&gt; &lt;code class="csharp plain"&gt;(getData == &lt;/code&gt;&lt;code class="csharp keyword"&gt;null&lt;/code&gt;&lt;code class="csharp plain"&gt;) getData = (start, max) =&amp;gt; eop.FindAll(&lt;/code&gt;&lt;code class="csharp keyword"&gt;null&lt;/code&gt;&lt;code class="csharp plain"&gt;, &lt;/code&gt;&lt;code class="csharp keyword"&gt;null&lt;/code&gt;&lt;code class="csharp plain"&gt;, &lt;/code&gt;&lt;code class="csharp keyword"&gt;null&lt;/code&gt;&lt;code class="csharp plain"&gt;, start, max);&lt;/code&gt;&lt;/div&gt; &lt;div class="line number93 index92 alt2"&gt;&amp;nbsp;&lt;/div&gt; &lt;div class="line number94 index93 alt1"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/code&gt;&lt;code class="csharp comments"&gt;// 在目标链接上启用事务保护&lt;/code&gt;&lt;/div&gt; &lt;div class="line number95 index94 alt2"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/code&gt;&lt;code class="csharp plain"&gt;eop.ConnName = DesConn;&lt;/code&gt;&lt;/div&gt; &lt;div class="line number96 index95 alt1"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/code&gt;&lt;code class="csharp plain"&gt;eop.BeginTransaction();&lt;/code&gt;&lt;/div&gt; &lt;div class="line number97 index96 alt2"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/code&gt;&lt;code class="csharp keyword"&gt;try&lt;/code&gt;&lt;/div&gt; &lt;div class="line number98 index97 alt1"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/code&gt;&lt;code class="csharp plain"&gt;{&lt;/code&gt;&lt;/div&gt; &lt;div class="line number99 index98 alt2"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/code&gt;&lt;code class="csharp plain"&gt;XTrace.WriteLine(&lt;/code&gt;&lt;code class="csharp string"&gt;"{0} 共 {1}"&lt;/code&gt;&lt;code class="csharp plain"&gt;, name, count);&lt;/code&gt;&lt;/div&gt; &lt;div class="line number100 index99 alt1"&gt;&amp;nbsp;&lt;/div&gt; &lt;div class="line number101 index100 alt2"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/code&gt;&lt;code class="csharp comments"&gt;// 允许插入自增&lt;/code&gt;&lt;/div&gt; &lt;div class="line number102 index101 alt1"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/code&gt;&lt;code class="csharp plain"&gt;var oldII = eop.AllowInsertIdentity;&lt;/code&gt;&lt;/div&gt; &lt;div class="line number103 index102 alt2"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/code&gt;&lt;code class="csharp keyword"&gt;if&lt;/code&gt; &lt;code class="csharp plain"&gt;(AllowInsertIdentity) eop.AllowInsertIdentity = &lt;/code&gt;&lt;code class="csharp keyword"&gt;true&lt;/code&gt;&lt;code class="csharp plain"&gt;;&lt;/code&gt;&lt;/div&gt; &lt;div class="line number104 index103 alt1"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/code&gt;&lt;code class="csharp comments"&gt;// 关闭SQL日志&lt;/code&gt;&lt;/div&gt; &lt;div class="line number105 index104 alt2"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/code&gt;&lt;code class="csharp plain"&gt;var oldShowSql = DAL.ShowSQL;&lt;/code&gt;&lt;/div&gt; &lt;div class="line number106 index105 alt1"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/code&gt;&lt;code class="csharp plain"&gt;DAL.ShowSQL = &lt;/code&gt;&lt;code class="csharp keyword"&gt;false&lt;/code&gt;&lt;code class="csharp plain"&gt;;&lt;/code&gt;&lt;/div&gt; &lt;div class="line number107 index106 alt2"&gt;&amp;nbsp;&lt;/div&gt; &lt;div class="line number108 index107 alt1"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/code&gt;&lt;code class="csharp plain"&gt;var total = 0;&lt;/code&gt;&lt;/div&gt; &lt;div class="line number109 index108 alt2"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/code&gt;&lt;code class="csharp plain"&gt;var index = 0;&lt;/code&gt;&lt;/div&gt; &lt;div class="line number110 index109 alt1"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/code&gt;&lt;code class="csharp keyword"&gt;while&lt;/code&gt; &lt;code class="csharp plain"&gt;(&lt;/code&gt;&lt;code class="csharp keyword"&gt;true&lt;/code&gt;&lt;code class="csharp plain"&gt;)&lt;/code&gt;&lt;/div&gt; &lt;div class="line number111 index110 alt2"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/code&gt;&lt;code class="csharp plain"&gt;{&lt;/code&gt;&lt;/div&gt; &lt;div class="line number112 index111 alt1"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/code&gt;&lt;code class="csharp plain"&gt;eop.ConnName = SrcConn;&lt;/code&gt;&lt;/div&gt; &lt;div class="line number113 index112 alt2"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/code&gt;&lt;code class="csharp plain"&gt;var list = getData(index, BatchSize);&lt;/code&gt;&lt;/div&gt; &lt;div class="line number114 index113 alt1"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/code&gt;&lt;code class="csharp keyword"&gt;if&lt;/code&gt; &lt;code class="csharp plain"&gt;(list == &lt;/code&gt;&lt;code class="csharp keyword"&gt;null&lt;/code&gt; &lt;code class="csharp plain"&gt;|| list.Count &amp;lt; 1) &lt;/code&gt;&lt;code class="csharp keyword"&gt;break&lt;/code&gt;&lt;code class="csharp plain"&gt;;&lt;/code&gt;&lt;/div&gt; &lt;div class="line number115 index114 alt2"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/code&gt;&lt;code class="csharp plain"&gt;index += list.Count;&lt;/code&gt;&lt;/div&gt; &lt;div class="line number116 index115 alt1"&gt;&amp;nbsp;&lt;/div&gt; &lt;div class="line number117 index116 alt2"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/code&gt;&lt;code class="csharp comments"&gt;// 处理事件，外部可以修改实体数据&lt;/code&gt;&lt;/div&gt; &lt;div class="line number118 index117 alt1"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/code&gt;&lt;code class="csharp keyword"&gt;if&lt;/code&gt; &lt;code class="csharp plain"&gt;(OnTransformEntity != &lt;/code&gt;&lt;code class="csharp keyword"&gt;null&lt;/code&gt;&lt;code class="csharp plain"&gt;)&lt;/code&gt;&lt;/div&gt; &lt;div class="line number119 index118 alt2"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/code&gt;&lt;code class="csharp plain"&gt;{&lt;/code&gt;&lt;/div&gt; &lt;div class="line number120 index119 alt1"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/code&gt;&lt;code class="csharp plain"&gt;var e = &lt;/code&gt;&lt;code class="csharp keyword"&gt;new&lt;/code&gt; &lt;code class="csharp plain"&gt;EventArgs&amp;lt;IEntity&amp;gt;(&lt;/code&gt;&lt;code class="csharp keyword"&gt;null&lt;/code&gt;&lt;code class="csharp plain"&gt;);&lt;/code&gt;&lt;/div&gt; &lt;div class="line number121 index120 alt2"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/code&gt;&lt;code class="csharp keyword"&gt;foreach&lt;/code&gt; &lt;code class="csharp plain"&gt;(var entity &lt;/code&gt;&lt;code class="csharp keyword"&gt;in&lt;/code&gt; &lt;code class="csharp plain"&gt;list)&lt;/code&gt;&lt;/div&gt; &lt;div class="line number122 index121 alt1"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/code&gt;&lt;code class="csharp plain"&gt;{&lt;/code&gt;&lt;/div&gt; &lt;div class="line number123 index122 alt2"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/code&gt;&lt;code class="csharp plain"&gt;e.Arg = entity;&lt;/code&gt;&lt;/div&gt; &lt;div class="line number124 index123 alt1"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/code&gt;&lt;code class="csharp plain"&gt;OnTransformEntity(&lt;/code&gt;&lt;code class="csharp keyword"&gt;this&lt;/code&gt;&lt;code class="csharp plain"&gt;, e);&lt;/code&gt;&lt;/div&gt; &lt;div class="line number125 index124 alt2"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/code&gt;&lt;code class="csharp plain"&gt;}&lt;/code&gt;&lt;/div&gt; &lt;div class="line number126 index125 alt1"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/code&gt;&lt;code class="csharp plain"&gt;}&lt;/code&gt;&lt;/div&gt; &lt;div class="line number127 index126 alt2"&gt;&amp;nbsp;&lt;/div&gt; &lt;div class="line number128 index127 alt1"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/code&gt;&lt;code class="csharp plain"&gt;eop.ConnName = DesConn;&lt;/code&gt;&lt;/div&gt; &lt;div class="line number129 index128 alt2"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/code&gt;&lt;code class="csharp plain"&gt;var rs = list.Insert(&lt;/code&gt;&lt;code class="csharp keyword"&gt;true&lt;/code&gt;&lt;code class="csharp plain"&gt;);&lt;/code&gt;&lt;/div&gt; &lt;div class="line number130 index129 alt1"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/code&gt;&lt;code class="csharp plain"&gt;XTrace.WriteLine(&lt;/code&gt;&lt;code class="csharp string"&gt;"{0} 导入 {1}/{2} {3:p}"&lt;/code&gt;&lt;code class="csharp plain"&gt;, name, index, count, (Double)index / count);&lt;/code&gt;&lt;/div&gt; &lt;div class="line number131 index130 alt2"&gt;&amp;nbsp;&lt;/div&gt; &lt;div class="line number132 index131 alt1"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/code&gt;&lt;code class="csharp plain"&gt;total += rs;&lt;/code&gt;&lt;/div&gt; &lt;div class="line number133 index132 alt2"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/code&gt;&lt;code class="csharp plain"&gt;}&lt;/code&gt;&lt;/div&gt; &lt;div class="line number134 index133 alt1"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/code&gt;&lt;code class="csharp plain"&gt;DAL.ShowSQL = oldShowSql;&lt;/code&gt;&lt;/div&gt; &lt;div class="line number135 index134 alt2"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/code&gt;&lt;code class="csharp comments"&gt;// 关闭插入自增&lt;/code&gt;&lt;/div&gt; &lt;div class="line number136 index135 alt1"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/code&gt;&lt;code class="csharp keyword"&gt;if&lt;/code&gt; &lt;code class="csharp plain"&gt;(AllowInsertIdentity) eop.AllowInsertIdentity = oldII;&lt;/code&gt;&lt;/div&gt; &lt;div class="line number137 index136 alt2"&gt;&amp;nbsp;&lt;/div&gt; &lt;div class="line number138 index137 alt1"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/code&gt;&lt;code class="csharp comments"&gt;// 在目标链接上启用事务保护&lt;/code&gt;&lt;/div&gt; &lt;div class="line number139 index138 alt2"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/code&gt;&lt;code class="csharp plain"&gt;eop.ConnName = DesConn;&lt;/code&gt;&lt;/div&gt; &lt;div class="line number140 index139 alt1"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/code&gt;&lt;code class="csharp plain"&gt;eop.Commit();&lt;/code&gt;&lt;/div&gt; &lt;div class="line number141 index140 alt2"&gt;&amp;nbsp;&lt;/div&gt; &lt;div class="line number142 index141 alt1"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/code&gt;&lt;code class="csharp keyword"&gt;return&lt;/code&gt; &lt;code class="csharp plain"&gt;total;&lt;/code&gt;&lt;/div&gt; &lt;div class="line number143 index142 alt2"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/code&gt;&lt;code class="csharp plain"&gt;}&lt;/code&gt;&lt;/div&gt; &lt;div class="line number144 index143 alt1"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/code&gt;&lt;code class="csharp keyword"&gt;catch&lt;/code&gt; &lt;code class="csharp plain"&gt;(Exception ex)&lt;/code&gt;&lt;/div&gt; &lt;div class="line number145 index144 alt2"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/code&gt;&lt;code class="csharp plain"&gt;{&lt;/code&gt;&lt;/div&gt; &lt;div class="line number146 index145 alt1"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/code&gt;&lt;code class="csharp plain"&gt;XTrace.WriteLine(&lt;/code&gt;&lt;code class="csharp string"&gt;"{0} 错误 {1}"&lt;/code&gt;&lt;code class="csharp plain"&gt;, name, ex.Message);&lt;/code&gt;&lt;/div&gt; &lt;div class="line number147 index146 alt2"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/code&gt;&lt;code class="csharp comments"&gt;// 在目标链接上启用事务保护&lt;/code&gt;&lt;/div&gt; &lt;div class="line number148 index147 alt1"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/code&gt;&lt;code class="csharp plain"&gt;eop.ConnName = DesConn;&lt;/code&gt;&lt;/div&gt; &lt;div class="line number149 index148 alt2"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/code&gt;&lt;code class="csharp plain"&gt;eop.Rollback();&lt;/code&gt;&lt;/div&gt; &lt;div class="line number150 index149 alt1"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/code&gt;&lt;code class="csharp keyword"&gt;throw&lt;/code&gt;&lt;code class="csharp plain"&gt;;&lt;/code&gt;&lt;/div&gt; &lt;div class="line number151 index150 alt2"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/code&gt;&lt;code class="csharp plain"&gt;}&lt;/code&gt;&lt;/div&gt; &lt;div class="line number152 index151 alt1"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/code&gt;&lt;code class="csharp plain"&gt;}&lt;/code&gt;&lt;/div&gt; &lt;div class="line number153 index152 alt2"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/code&gt;&lt;code class="csharp plain"&gt;#endregion&lt;/code&gt;&lt;/div&gt; &lt;div class="line number154 index153 alt1"&gt;&amp;nbsp;&lt;/div&gt; &lt;div class="line number155 index154 alt2"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/code&gt;&lt;code class="csharp plain"&gt;#region 事件&lt;/code&gt;&lt;/div&gt; &lt;div class="line number156 index155 alt1"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/code&gt;&lt;code class="csharp color1"&gt;/// &amp;lt;summary&amp;gt;转换表时触发。如果参数被置空，表示不转换该表&amp;lt;/summary&amp;gt;&lt;/code&gt;&lt;/div&gt; &lt;div class="line number157 index156 alt2"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/code&gt;&lt;code class="csharp keyword"&gt;public&lt;/code&gt; &lt;code class="csharp keyword"&gt;event&lt;/code&gt; &lt;code class="csharp plain"&gt;EventHandler&amp;lt;EventArgs&amp;lt;IDataTable&amp;gt;&amp;gt; OnTransformTable;&lt;/code&gt;&lt;/div&gt; &lt;div class="line number158 index157 alt1"&gt;&amp;nbsp;&lt;/div&gt; &lt;div class="line number159 index158 alt2"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/code&gt;&lt;code class="csharp color1"&gt;///// &amp;lt;summary&amp;gt;转换实体时触发&amp;lt;/summary&amp;gt;&lt;/code&gt;&lt;/div&gt; &lt;div class="line number160 index159 alt1"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/code&gt;&lt;code class="csharp comments"&gt;//public event EventHandler&amp;lt;EventArgs&amp;lt;IEntity&amp;gt;&amp;gt; OnTransformEntity;&lt;/code&gt;&lt;/div&gt; &lt;div class="line number161 index160 alt2"&gt;&amp;nbsp;&lt;/div&gt; &lt;div class="line number162 index161 alt1"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/code&gt;&lt;code class="csharp color1"&gt;/// &amp;lt;summary&amp;gt;转换实体时触发&amp;lt;/summary&amp;gt;&lt;/code&gt;&lt;/div&gt; &lt;div class="line number163 index162 alt2"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/code&gt;&lt;code class="csharp keyword"&gt;public&lt;/code&gt; &lt;code class="csharp keyword"&gt;event&lt;/code&gt; &lt;code class="csharp plain"&gt;EventHandler&amp;lt;EventArgs&amp;lt;IEntity&amp;gt;&amp;gt; OnTransformEntity;&lt;/code&gt;&lt;/div&gt; &lt;div class="line number164 index163 alt1"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/code&gt;&lt;code class="csharp plain"&gt;#endregion&lt;/code&gt;&lt;/div&gt; &lt;div class="line number165 index164 alt2"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/code&gt;&lt;code class="csharp plain"&gt;}&lt;/code&gt;&lt;/div&gt; &lt;div class="line number166 index165 alt1"&gt;&lt;code class="csharp plain"&gt;}&lt;/code&gt;&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;/div&gt;&lt;img src="http://www.cnblogs.com/nnhy/aggbug/2493859.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/nnhy/archive/2012/05/10/2493859.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/nnhy/archive/2012/05/10/2493853.html</id><title type="text">XCode最佳实践之最佳数据类型</title><summary type="text">与其它ORM框架相比，XCode拥有最强的多数据库正向反向工程，暂时还没有发现能在这点上超于XCode的，哈哈！但是，XCode的多数据库反向工程，也是有代价的，不同数据库的数据类型相差十万八千里，我们不可能完全支持。所以，我们只做了常见的一些数据类型支持，但是这些已经足以满足99%的要求。最佳数据类型如下：1，整型。Int32是标准配置，这个必须有的。在Oracle，整型就是小数为0的Nume...</summary><published>2012-05-10T02:17:00Z</published><updated>2012-05-10T02:17:00Z</updated><author><name>大石头</name><uri>http://www.cnblogs.com/nnhy/</uri></author><link rel="alternate" href="http://www.cnblogs.com/nnhy/archive/2012/05/10/2493853.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/nnhy/archive/2012/05/10/2493853.html"/><content type="html">&lt;p&gt;&lt;/p&gt; &lt;p&gt;与其它ORM框架相比，XCode拥有最强的多数据库正向反向工程，暂时还没有发现能在这点上超于XCode的，哈哈！&lt;br&gt;&lt;br&gt;但是，XCode的多数据库反向工程，也是有代价的，不同数据库的数据类型相差十万八千里，我们不可能完全支持。&lt;br&gt;所以，我们只做了常见的一些数据类型支持，但是这些已经足以满足99%的要求。&lt;br&gt;&lt;br&gt;最佳数据类型如下：&lt;br&gt;1，整型。Int32是标准配置，这个必须有的。在Oracle，整型就是小数为0的Numeric&lt;br&gt;2，长整型。Int64，大部分数据库都有吧。&lt;br&gt;3，短整型。Int16，这个要小心了，似乎有些数据库不支持，不支持时XCode会自动选Int32，兄弟就不要省这点存储空间啦。&lt;br&gt;4，布尔型。Boolean，大部分数据库支持，MySql不支持，它一般用一个枚举Y/N来实现，XCode有支持。&lt;br&gt;5，浮点数。单精度Fload双精度Double，建议一律用Double，否则不同数据库很难统一，还有千万小心精度设置和小数位数，XCode反向工程可能不能把精度和小数位数完美的迁移到其它类型数据库，同类型没有问题。&lt;br&gt;6，货币。Decimal，货币类型必须有的，对应MSSQL的Money。开发的时候小心，不要拿Decimal判断两个值是否相等，应该相减判断差值是否小于0.000001，这个小数自己看情况定。&lt;br&gt;7，时间日期。DateTime，各种数据库，一律用时间日期DateTime，不支持单独的Date或Time的迁移。这个类型是XCode里面最为痛苦的一个类型，单独的Date和Time根本无法实现不同类型数据库的兼容。&lt;br&gt;8，字符串。String，在MSSQL一律用nvarchar，Unicode变长。字符串类型是唯一完整支持不同数据库设置长度的，以上类型全部不能完整支持。&lt;br&gt;9，大文本。String，在MSSQL一律用ntext。在.Net中同为String，根据不同数据库的字符串最大长度（MSSQL是4000），识别为nvarchar还是ntext。&lt;br&gt;&lt;br&gt;最佳体验：&lt;br&gt;1，单一主键，建议用自增ID。XCode支持迁移自增字段的数据，当然，如果需要合并数据，那得自己处理逻辑&lt;br&gt;2，建立各种索引。&lt;br&gt;&lt;br&gt;最差体验：&lt;br&gt;0，零号是最最最糟糕的，XCode不支持可空类型，所以千万不要让null和“”有不同的业务意义，各种类型的默认值代表无效数据。&lt;br&gt;1，除了字符串长度外，其它类型绝对绝对，尽可能的不要设置其它属性，包括长度、精度、小数位数，否则XCode不能实现完美迁移&lt;br&gt;2，XCode目前不支持各种数据库的外键。新增的表间关系是通过猜测得到的，规则：字段名等于另一个表名加主键名时，认为是外键&lt;br&gt;3，不要用Guid类型和二进制类型，XCode只能支持正向工程，不能支持它们的反向工程。可用nvarchar(32)替代Guid&lt;br&gt;4，字符串尽量不要用varchar/char等，因为不同数据库甚至相同数据库的不同版本，差别好大。这样省不了多少空间。&lt;br&gt;5，尽可能的不要用默认值。目前只有当前时间默认值支持好一点，newid()也有简单的支持，这块太痛苦了，也许将来不支持了。&lt;br&gt;&lt;br&gt;XCode内部没有类型映射表，别乱猜测！！！&lt;br&gt;ADO.Net的架构里面有一个DataTypes的模式，XCode利用的正是它，所以，什么字段类型对应什么.Net类型，是各种数据库驱动自身说了算，不是XCode说了算，所以我们也不知道所有类型是否支持。&lt;br&gt;反正这么多年，我们占用这些类型，就已经足够了。 &lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt;最后补一句：&lt;br&gt;&lt;strong&gt;&lt;font color="red"&gt;&lt;br&gt;&lt;font size="7"&gt;我们只做最常见的80%日常工作，什么特别的情况，自己想办法！&lt;/font&gt;&lt;/font&gt;&lt;/strong&gt;&lt;img src="http://www.cnblogs.com/nnhy/aggbug/2493853.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/nnhy/archive/2012/05/10/2493853.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/nnhy/archive/2012/05/10/2493761.html</id><title type="text">C#嵌入x86汇编——一个GPIO接口的实现</title><summary type="text">开始进入工业自动化，买的工控机带有GPIO接口，可用于直接控制继电器。 从厂家拿到接口手册一看，居然是汇编直接操作端口，基本上是IN/OUT指令了。接口很简单，计算位移，读取；计算位移，写入。 这种接...</summary><published>2012-05-10T01:36:00Z</published><updated>2012-05-10T01:36:00Z</updated><author><name>大石头</name><uri>http://www.cnblogs.com/nnhy/</uri></author><link rel="alternate" href="http://www.cnblogs.com/nnhy/archive/2012/05/10/2493761.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/nnhy/archive/2012/05/10/2493761.html"/><content type="html">&lt;p&gt;&lt;span style="font-size: large;"&gt;开始进入工业自动化，买的工控机带有GPIO接口，可用于直接控制继电器。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: large;"&gt;从厂家拿到接口手册一看，居然是汇编直接操作端口，基本上是IN/OUT指令了。接口很简单，计算位移，读取；计算位移，写入。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: large;"&gt;这种接口，常见有四种办法，分别是四种语言实现，一是直接写ASM，不过要公开给C#做的应用程序调用，很不容易，另外三种是C/C++/Delphi嵌入汇编，倒是问题不大。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: large;"&gt;接口实在是小，不想大动干戈，所以想了别的办法。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: large;"&gt;第五种，用C++/CLI，这也是一个不错的主意。但是我甚至想省掉这个接口DLL，于是有了第六种办法：C#嵌入x86汇编。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: large;"&gt;C#是没办法像C/C++/Delphi那样直接嵌入x86汇编的，所以需要做点手脚。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: large;"&gt;在汇编里面，我们为了修改一个软件经常找一块空白区域来写汇编代码，然后Jmp过去执行。（不明白这一句话的可以跳过，或者去看雪论坛）&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: large;"&gt;但是显然要在C#代码里面这么做很不现实，即使用C/C++编译得到obj，C#也没办法链接这个obj。（这个涉及编译的也可以跳过）&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: large;"&gt;回头一想（其实不是现在想，07年就做过C#嵌入汇编），其实C#也跑在x86上，IL指令最终还是要编译成x86汇编指令的，我们应该可以这些写汇编指令，所需要的只是一块空间而已。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: large;"&gt;我们可以申请一块非托管空间嘛，于是有：&lt;/span&gt;&lt;/p&gt;&lt;span style="color: #66747b;"&gt;// 分配内存&lt;br/&gt;&lt;/span&gt;&lt;code&gt;var ptr = Marshal.AllocHGlobal(code.Length);&lt;/code&gt;&lt;p&gt;&lt;span style="font-size: large;"&gt;有了空间，我们就可以把二进制的汇编指令给写进去啦：&lt;/span&gt;&lt;/p&gt;&lt;span style="color: #66747b;"&gt;// 写入汇编指令&lt;br/&gt;&lt;/span&gt;&lt;code&gt;&lt;/code&gt;&lt;code&gt;Marshal.Copy(code, 0, ptr, code.Length);&lt;/code&gt;&lt;p&gt;&lt;span style="font-size: large;"&gt;然后呢？.Net提供一个途径，让我们可以把一个内存指针转为一个委托（一直都说.Net的委托其实就是C/C++的函数指针哈）：&lt;/span&gt;&lt;/p&gt;&lt;span style="color: #66747b;"&gt;// 转为委托&lt;br/&gt;&lt;/span&gt;&lt;code&gt;return&lt;/code&gt; &lt;code&gt;(T)(Object)Marshal.GetDelegateForFunctionPointer(ptr, &lt;/code&gt;&lt;code&gt;typeof&lt;/code&gt;&lt;code&gt;(T));&lt;/code&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: large;"&gt;那么，剩下的问题，就是如何把汇编转为二进制了！&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: large;"&gt;这个我们是不能像C/C++/Delphi那样直接写汇编指令的，所以得走点弯路。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: large;"&gt;我的做法是用OD随便打开一个程序，在上面直接写汇编代码，然后把汇编的十六进制复制出来，放到C#代码中。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: large;"&gt;剩下的就不多说了，直接上代码吧！&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;div class="container"&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;" onclick="cnblogs_code_show('20005fa5-0e86-4573-b38b-0d2f2001481a')"&gt;&lt;div id="cnblogs_code_open_20005fa5-0e86-4573-b38b-0d2f2001481a" class="cnblogs_code_hide"&gt;&lt;span style="color: #0000ff;"&gt;using&lt;/span&gt;&lt;span style="color: #000000;"&gt; System;&lt;br/&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;using&lt;/span&gt;&lt;span style="color: #000000;"&gt; System.Collections.Generic;&lt;br/&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;using&lt;/span&gt;&lt;span style="color: #000000;"&gt; System.Text;&lt;br/&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;using&lt;/span&gt;&lt;span style="color: #000000;"&gt; System.Runtime.InteropServices;&lt;br/&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;using&lt;/span&gt;&lt;span style="color: #000000;"&gt; System.Diagnostics;&lt;br/&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;using&lt;/span&gt;&lt;span style="color: #000000;"&gt; System.IO;&lt;br/&gt; &lt;br/&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;namespace&lt;/span&gt;&lt;span style="color: #000000;"&gt; ConsoleApplication19&lt;br/&gt;{&lt;br/&gt;    &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;class&lt;/span&gt;&lt;span style="color: #000000;"&gt; GPIO&lt;br/&gt;    {&lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;#region&lt;/span&gt; 属性&lt;br/&gt;        &lt;span style="color: #0000ff;"&gt;private&lt;/span&gt;&lt;span style="color: #000000;"&gt; Int32 _Offset;&lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;选择位移&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;br/&gt;        &lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; Int32 Offset { &lt;span style="color: #0000ff;"&gt;get&lt;/span&gt; { &lt;span style="color: #0000ff;"&gt;return&lt;/span&gt; _Offset; } &lt;span style="color: #0000ff;"&gt;set&lt;/span&gt; { _Offset =&lt;span style="color: #000000;"&gt; value; } }&lt;br/&gt; &lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;private&lt;/span&gt;&lt;span style="color: #000000;"&gt; Int32 _Bit;&lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;选择位&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;br/&gt;        &lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; Int32 Bit { &lt;span style="color: #0000ff;"&gt;get&lt;/span&gt; { &lt;span style="color: #0000ff;"&gt;return&lt;/span&gt; _Bit; } &lt;span style="color: #0000ff;"&gt;set&lt;/span&gt; { _Bit =&lt;span style="color: #000000;"&gt; value; } }&lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;#endregion&lt;/span&gt;&lt;br/&gt; &lt;br/&gt;        &lt;span style="color: #0000ff;"&gt;#region&lt;/span&gt; 构造&lt;br/&gt;        &lt;span style="color: #0000ff;"&gt;private&lt;/span&gt;&lt;span style="color: #000000;"&gt; GPIO(Int32 offset, Int32 bit)&lt;br/&gt;        {&lt;br/&gt;            Offset &lt;/span&gt;=&lt;span style="color: #000000;"&gt; offset;&lt;br/&gt;            Bit &lt;/span&gt;=&lt;span style="color: #000000;"&gt; bit;&lt;br/&gt;        }&lt;br/&gt; &lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;private&lt;/span&gt;&lt;span style="color: #000000;"&gt; GPIO(Int32 gpio)&lt;br/&gt;        {&lt;br/&gt;            Offset &lt;/span&gt;= gpio / &lt;span style="color: #800080;"&gt;16&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&lt;br/&gt;            Bit &lt;/span&gt;= gpio % &lt;span style="color: #800080;"&gt;16&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&lt;br/&gt;        }&lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;#endregion&lt;/span&gt;&lt;br/&gt; &lt;br/&gt;        &lt;span style="color: #0000ff;"&gt;#region&lt;/span&gt; 预定义针脚&lt;br/&gt;        &lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;static&lt;/span&gt; GPIO Pin2 = &lt;span style="color: #0000ff;"&gt;new&lt;/span&gt; GPIO(&lt;span style="color: #800080;"&gt;0&lt;/span&gt;, &lt;span style="color: #800080;"&gt;6&lt;/span&gt;&lt;span style="color: #000000;"&gt;);&lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;static&lt;/span&gt; GPIO Pin3 = &lt;span style="color: #0000ff;"&gt;new&lt;/span&gt; GPIO(&lt;span style="color: #800080;"&gt;0&lt;/span&gt;, &lt;span style="color: #800080;"&gt;7&lt;/span&gt;&lt;span style="color: #000000;"&gt;);&lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;static&lt;/span&gt; GPIO Pin4 = &lt;span style="color: #0000ff;"&gt;new&lt;/span&gt; GPIO(&lt;span style="color: #800080;"&gt;2&lt;/span&gt;, &lt;span style="color: #800080;"&gt;1&lt;/span&gt;&lt;span style="color: #000000;"&gt;);&lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;static&lt;/span&gt; GPIO Pin5 = &lt;span style="color: #0000ff;"&gt;new&lt;/span&gt; GPIO(&lt;span style="color: #800080;"&gt;2&lt;/span&gt;, &lt;span style="color: #800080;"&gt;4&lt;/span&gt;&lt;span style="color: #000000;"&gt;);&lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;static&lt;/span&gt; GPIO Pin6 = &lt;span style="color: #0000ff;"&gt;new&lt;/span&gt; GPIO(&lt;span style="color: #800080;"&gt;1&lt;/span&gt;, &lt;span style="color: #800080;"&gt;0&lt;/span&gt;&lt;span style="color: #000000;"&gt;);&lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;static&lt;/span&gt; GPIO Pin7 = &lt;span style="color: #0000ff;"&gt;new&lt;/span&gt; GPIO(&lt;span style="color: #800080;"&gt;1&lt;/span&gt;, &lt;span style="color: #800080;"&gt;4&lt;/span&gt;&lt;span style="color: #000000;"&gt;);&lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;static&lt;/span&gt; GPIO Pin8 = &lt;span style="color: #0000ff;"&gt;new&lt;/span&gt; GPIO(&lt;span style="color: #800080;"&gt;3&lt;/span&gt;, &lt;span style="color: #800080;"&gt;3&lt;/span&gt;&lt;span style="color: #000000;"&gt;);&lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;static&lt;/span&gt; GPIO Pin9 = &lt;span style="color: #0000ff;"&gt;new&lt;/span&gt; GPIO(&lt;span style="color: #800080;"&gt;3&lt;/span&gt;, &lt;span style="color: #800080;"&gt;4&lt;/span&gt;&lt;span style="color: #000000;"&gt;);&lt;br/&gt; &lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;static&lt;/span&gt; GPIO IO6 = &lt;span style="color: #0000ff;"&gt;new&lt;/span&gt; GPIO(&lt;span style="color: #800080;"&gt;6&lt;/span&gt;&lt;span style="color: #000000;"&gt;);&lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;static&lt;/span&gt; GPIO IO7 = &lt;span style="color: #0000ff;"&gt;new&lt;/span&gt; GPIO(&lt;span style="color: #800080;"&gt;7&lt;/span&gt;&lt;span style="color: #000000;"&gt;);&lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;static&lt;/span&gt; GPIO IO17 = &lt;span style="color: #0000ff;"&gt;new&lt;/span&gt; GPIO(&lt;span style="color: #800080;"&gt;17&lt;/span&gt;&lt;span style="color: #000000;"&gt;);&lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;static&lt;/span&gt; GPIO IO20 = &lt;span style="color: #0000ff;"&gt;new&lt;/span&gt; GPIO(&lt;span style="color: #800080;"&gt;20&lt;/span&gt;&lt;span style="color: #000000;"&gt;);&lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;static&lt;/span&gt; GPIO IO8 = &lt;span style="color: #0000ff;"&gt;new&lt;/span&gt; GPIO(&lt;span style="color: #800080;"&gt;8&lt;/span&gt;&lt;span style="color: #000000;"&gt;);&lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;static&lt;/span&gt; GPIO IO12 = &lt;span style="color: #0000ff;"&gt;new&lt;/span&gt; GPIO(&lt;span style="color: #800080;"&gt;12&lt;/span&gt;&lt;span style="color: #000000;"&gt;);&lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;static&lt;/span&gt; GPIO IO27 = &lt;span style="color: #0000ff;"&gt;new&lt;/span&gt; GPIO(&lt;span style="color: #800080;"&gt;27&lt;/span&gt;&lt;span style="color: #000000;"&gt;);&lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;static&lt;/span&gt; GPIO IO28 = &lt;span style="color: #0000ff;"&gt;new&lt;/span&gt; GPIO(&lt;span style="color: #800080;"&gt;28&lt;/span&gt;&lt;span style="color: #000000;"&gt;);&lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;#endregion&lt;/span&gt;&lt;br/&gt; &lt;br/&gt;        &lt;span style="color: #0000ff;"&gt;#region&lt;/span&gt; 业务&lt;br/&gt;        &lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;是否启用&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;br/&gt;        &lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; Boolean Enable { &lt;span style="color: #0000ff;"&gt;get&lt;/span&gt; { &lt;span style="color: #0000ff;"&gt;return&lt;/span&gt; Read(Offset, Bit); } &lt;span style="color: #0000ff;"&gt;set&lt;/span&gt;&lt;span style="color: #000000;"&gt; { WriteBit(Offset, Bit, value); } }&lt;br/&gt; &lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;是否输出&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;br/&gt;        &lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; Boolean Output { &lt;span style="color: #0000ff;"&gt;get&lt;/span&gt; { &lt;span style="color: #0000ff;"&gt;return&lt;/span&gt; Read(Offset + &lt;span style="color: #800080;"&gt;4&lt;/span&gt;, Bit); } &lt;span style="color: #0000ff;"&gt;set&lt;/span&gt; { WriteBit(Offset + &lt;span style="color: #800080;"&gt;4&lt;/span&gt;&lt;span style="color: #000000;"&gt;, Bit, value); } }&lt;br/&gt; &lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;是否设置数据位&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;br/&gt;        &lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; Boolean Data { &lt;span style="color: #0000ff;"&gt;get&lt;/span&gt; { &lt;span style="color: #0000ff;"&gt;return&lt;/span&gt; Read(Offset + &lt;span style="color: #800080;"&gt;12&lt;/span&gt;, Bit); } &lt;span style="color: #0000ff;"&gt;set&lt;/span&gt; { WriteBit(Offset + &lt;span style="color: #800080;"&gt;12&lt;/span&gt;&lt;span style="color: #000000;"&gt;, Bit, value); } }&lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;#endregion&lt;/span&gt;&lt;br/&gt; &lt;br/&gt;        &lt;span style="color: #0000ff;"&gt;#region&lt;/span&gt; 读取端口&lt;br/&gt;        &lt;span style="color: #0000ff;"&gt;const&lt;/span&gt; Int16 BASEADDRESS = &lt;span style="color: #800080;"&gt;0x500&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&lt;br/&gt; &lt;br/&gt;        Boolean Read(Int32 offset, Int32 bit)&lt;br/&gt;        {&lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;var&lt;/span&gt; d = ReadHandler((Int16)(BASEADDRESS +&lt;span style="color: #000000;"&gt; offset));&lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;var&lt;/span&gt; c = (Byte)~(&lt;span style="color: #800080;"&gt;1&lt;/span&gt; &amp;lt;&amp;lt;&lt;span style="color: #000000;"&gt; bit);&lt;br/&gt;            d &lt;/span&gt;&amp;amp;=&lt;span style="color: #000000;"&gt; c;&lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;return&lt;/span&gt; d ==&lt;span style="color: #000000;"&gt; c;&lt;br/&gt;        }&lt;br/&gt; &lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;private&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;static&lt;/span&gt;&lt;span style="color: #000000;"&gt; ReadFunc _ReadHandler;&lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;属性说明&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;br/&gt;        &lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;static&lt;/span&gt; ReadFunc ReadHandler { &lt;span style="color: #0000ff;"&gt;get&lt;/span&gt; { &lt;span style="color: #0000ff;"&gt;return&lt;/span&gt; _ReadHandler ?? (_ReadHandler =&lt;span style="color: #000000;"&gt; GetReadHandler()); } }&lt;br/&gt; &lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;static IntPtr ptr;&lt;/span&gt;&lt;br/&gt;        &lt;span style="color: #0000ff;"&gt;static&lt;/span&gt;&lt;span style="color: #000000;"&gt; ReadFunc GetReadHandler()&lt;br/&gt;        {&lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt; 汇编指令&lt;/span&gt;&lt;br/&gt;            &lt;span style="color: #0000ff;"&gt;var&lt;/span&gt; code = &lt;span style="color: #0000ff;"&gt;new&lt;/span&gt;&lt;span style="color: #000000;"&gt; Byte[] {&lt;br/&gt;                &lt;/span&gt;&lt;span style="color: #800080;"&gt;0x66&lt;/span&gt;, &lt;span style="color: #800080;"&gt;0x8B&lt;/span&gt;, &lt;span style="color: #800080;"&gt;0x55&lt;/span&gt;, &lt;span style="color: #800080;"&gt;0x08&lt;/span&gt;, &lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;mov dx, word ptr [ebp+8]&lt;/span&gt;&lt;br/&gt;                &lt;span style="color: #800080;"&gt;0xEC&lt;/span&gt;, &lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;in al, dx&lt;/span&gt;&lt;br/&gt;&lt;span style="color: #000000;"&gt;            };&lt;br/&gt; &lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;return&lt;/span&gt; (ReadFunc)InjectASM&amp;lt;ReadFunc&amp;gt;&lt;span style="color: #000000;"&gt;(code);&lt;br/&gt;        }&lt;br/&gt; &lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;delegate&lt;/span&gt;&lt;span style="color: #000000;"&gt; Byte ReadFunc(Int16 address);&lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;#endregion&lt;/span&gt;&lt;br/&gt; &lt;br/&gt;        &lt;span style="color: #0000ff;"&gt;#region&lt;/span&gt; 写入端口&lt;br/&gt;        &lt;span style="color: #0000ff;"&gt;void&lt;/span&gt;&lt;span style="color: #000000;"&gt; Write(Int32 offset, Int32 value)&lt;br/&gt;        {&lt;br/&gt;            WriteHandler((Int16)(BASEADDRESS &lt;/span&gt;+&lt;span style="color: #000000;"&gt; offset), (Byte)value);&lt;br/&gt;        }&lt;br/&gt; &lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;private&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;static&lt;/span&gt;&lt;span style="color: #000000;"&gt; WriteFunc _WriteHandler;&lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;属性说明&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;br/&gt;        &lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;static&lt;/span&gt; WriteFunc WriteHandler { &lt;span style="color: #0000ff;"&gt;get&lt;/span&gt; { &lt;span style="color: #0000ff;"&gt;return&lt;/span&gt; _WriteHandler ?? (_WriteHandler =&lt;span style="color: #000000;"&gt; GetWriteHandler()); } }&lt;br/&gt; &lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;static&lt;/span&gt;&lt;span style="color: #000000;"&gt; WriteFunc GetWriteHandler()&lt;br/&gt;        {&lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt; 汇编指令&lt;/span&gt;&lt;br/&gt;            &lt;span style="color: #0000ff;"&gt;var&lt;/span&gt; code = &lt;span style="color: #0000ff;"&gt;new&lt;/span&gt;&lt;span style="color: #000000;"&gt; Byte[] {&lt;br/&gt;                &lt;/span&gt;&lt;span style="color: #800080;"&gt;0x66&lt;/span&gt;, &lt;span style="color: #800080;"&gt;0x8B&lt;/span&gt;, &lt;span style="color: #800080;"&gt;0x55&lt;/span&gt;, &lt;span style="color: #800080;"&gt;0x08&lt;/span&gt;, &lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;mov dx, word ptr [ebp+8]&lt;/span&gt;&lt;br/&gt;                &lt;span style="color: #800080;"&gt;0x8A&lt;/span&gt;, &lt;span style="color: #800080;"&gt;0x45&lt;/span&gt;, &lt;span style="color: #800080;"&gt;0x0C&lt;/span&gt;, &lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;mov al, byte ptr [ebp+C]&lt;/span&gt;&lt;br/&gt;                &lt;span style="color: #800080;"&gt;0xEE&lt;/span&gt;  &lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;out dx, al&lt;/span&gt;&lt;br/&gt;&lt;span style="color: #000000;"&gt;            };&lt;br/&gt; &lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;return&lt;/span&gt; InjectASM&amp;lt;WriteFunc&amp;gt;&lt;span style="color: #000000;"&gt;(code);&lt;br/&gt;        }&lt;br/&gt; &lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;delegate&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;void&lt;/span&gt;&lt;span style="color: #000000;"&gt; WriteFunc(Int16 address, Byte bit);&lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;#endregion&lt;/span&gt;&lt;br/&gt; &lt;br/&gt;        &lt;span style="color: #0000ff;"&gt;#region&lt;/span&gt; 写入端口位&lt;br/&gt;        &lt;span style="color: #0000ff;"&gt;void&lt;/span&gt;&lt;span style="color: #000000;"&gt; WriteBit(Int32 offset, Int32 bit, Boolean value)&lt;br/&gt;        {&lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;if&lt;/span&gt;&lt;span style="color: #000000;"&gt; (value)&lt;br/&gt;                SetBitHandler((Int16)(BASEADDRESS &lt;/span&gt;+&lt;span style="color: #000000;"&gt; offset), (Byte)bit);&lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;else&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br/&gt;                ClearBitHandler((Int16)(BASEADDRESS &lt;/span&gt;+&lt;span style="color: #000000;"&gt; offset), (Byte)bit);&lt;br/&gt;        }&lt;br/&gt; &lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;private&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;static&lt;/span&gt;&lt;span style="color: #000000;"&gt; WriteBitFunc _SetBitHandler;&lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;设置位&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;br/&gt;        &lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;static&lt;/span&gt; WriteBitFunc SetBitHandler { &lt;span style="color: #0000ff;"&gt;get&lt;/span&gt; { &lt;span style="color: #0000ff;"&gt;return&lt;/span&gt; _SetBitHandler ?? (_SetBitHandler =&lt;span style="color: #000000;"&gt; GetSetBitHandler()); } }&lt;br/&gt; &lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;private&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;static&lt;/span&gt;&lt;span style="color: #000000;"&gt; WriteBitFunc _ClearBitHandler;&lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;清除位&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;br/&gt;        &lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;static&lt;/span&gt; WriteBitFunc ClearBitHandler { &lt;span style="color: #0000ff;"&gt;get&lt;/span&gt; { &lt;span style="color: #0000ff;"&gt;return&lt;/span&gt; _ClearBitHandler ?? (_ClearBitHandler =&lt;span style="color: #000000;"&gt; GetClearBitHandler()); } }&lt;br/&gt; &lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;static&lt;/span&gt;&lt;span style="color: #000000;"&gt; WriteBitFunc GetSetBitHandler()&lt;br/&gt;        {&lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt; 汇编指令&lt;/span&gt;&lt;br/&gt;            &lt;span style="color: #0000ff;"&gt;var&lt;/span&gt; code = &lt;span style="color: #0000ff;"&gt;new&lt;/span&gt;&lt;span style="color: #000000;"&gt; Byte[] {&lt;br/&gt;                &lt;/span&gt;&lt;span style="color: #800080;"&gt;0x53&lt;/span&gt;, &lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;push ebx&lt;/span&gt;&lt;br/&gt;                &lt;span style="color: #800080;"&gt;0x51&lt;/span&gt;, &lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;push ecx&lt;/span&gt;&lt;br/&gt;                &lt;span style="color: #800080;"&gt;0x66&lt;/span&gt;, &lt;span style="color: #800080;"&gt;0x8B&lt;/span&gt;, &lt;span style="color: #800080;"&gt;0x55&lt;/span&gt;, &lt;span style="color: #800080;"&gt;0x08&lt;/span&gt;, &lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;mov dx, word ptr [ebp+8]&lt;/span&gt;&lt;br/&gt;                &lt;span style="color: #800080;"&gt;0x8A&lt;/span&gt;, &lt;span style="color: #800080;"&gt;0x45&lt;/span&gt;, &lt;span style="color: #800080;"&gt;0x0C&lt;/span&gt;, &lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;mov al, byte ptr [ebp+C]&lt;/span&gt;&lt;br/&gt;                &lt;span style="color: #800080;"&gt;0xB3&lt;/span&gt;, &lt;span style="color: #800080;"&gt;0x01&lt;/span&gt;, &lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;mov bl, 1&lt;/span&gt;&lt;br/&gt;                &lt;span style="color: #800080;"&gt;0xD2&lt;/span&gt;, &lt;span style="color: #800080;"&gt;0xE3&lt;/span&gt;, &lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;shl bl, cl&lt;/span&gt;&lt;br/&gt;                &lt;span style="color: #800080;"&gt;0xEC&lt;/span&gt;, &lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;in al, dx&lt;/span&gt;&lt;br/&gt;                &lt;span style="color: #800080;"&gt;0x08&lt;/span&gt;, &lt;span style="color: #800080;"&gt;0xD8&lt;/span&gt;, &lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;or al, bl&lt;/span&gt;&lt;br/&gt;                &lt;span style="color: #800080;"&gt;0xEE&lt;/span&gt;, &lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;out dx, al&lt;/span&gt;&lt;br/&gt;                &lt;span style="color: #800080;"&gt;0x59&lt;/span&gt;, &lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;pop ecx&lt;/span&gt;&lt;br/&gt;                &lt;span style="color: #800080;"&gt;0x5B&lt;/span&gt;  &lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;pop ebx&lt;/span&gt;&lt;br/&gt;&lt;span style="color: #000000;"&gt;            };&lt;br/&gt; &lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;return&lt;/span&gt; InjectASM&amp;lt;WriteBitFunc&amp;gt;&lt;span style="color: #000000;"&gt;(code);&lt;br/&gt;        }&lt;br/&gt; &lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;static&lt;/span&gt;&lt;span style="color: #000000;"&gt; WriteBitFunc GetClearBitHandler()&lt;br/&gt;        {&lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt; 读出字节，取消指定位后重新写回去&lt;/span&gt;&lt;br/&gt;            &lt;span style="color: #0000ff;"&gt;var&lt;/span&gt; code = &lt;span style="color: #0000ff;"&gt;new&lt;/span&gt;&lt;span style="color: #000000;"&gt; Byte[] {&lt;br/&gt;                &lt;/span&gt;&lt;span style="color: #800080;"&gt;0x53&lt;/span&gt;, &lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;push ebx&lt;/span&gt;&lt;br/&gt;                &lt;span style="color: #800080;"&gt;0x51&lt;/span&gt;, &lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;push ecx&lt;/span&gt;&lt;br/&gt;                &lt;span style="color: #800080;"&gt;0x66&lt;/span&gt;, &lt;span style="color: #800080;"&gt;0x8B&lt;/span&gt;, &lt;span style="color: #800080;"&gt;0x55&lt;/span&gt;, &lt;span style="color: #800080;"&gt;0x08&lt;/span&gt;, &lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;mov dx, word ptr [ebp+8]&lt;/span&gt;&lt;br/&gt;                &lt;span style="color: #800080;"&gt;0x8A&lt;/span&gt;, &lt;span style="color: #800080;"&gt;0x45&lt;/span&gt;, &lt;span style="color: #800080;"&gt;0x0C&lt;/span&gt;, &lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;mov al, byte ptr [ebp+C]&lt;/span&gt;&lt;br/&gt;                &lt;span style="color: #800080;"&gt;0xB3&lt;/span&gt;, &lt;span style="color: #800080;"&gt;0x01&lt;/span&gt;, &lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;mov bl, 1&lt;/span&gt;&lt;br/&gt;                &lt;span style="color: #800080;"&gt;0xD2&lt;/span&gt;, &lt;span style="color: #800080;"&gt;0xE3&lt;/span&gt;, &lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;shl bl, cl&lt;/span&gt;&lt;br/&gt;                &lt;span style="color: #800080;"&gt;0xF6&lt;/span&gt;, &lt;span style="color: #800080;"&gt;0xD3&lt;/span&gt;, &lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;not bl&lt;/span&gt;&lt;br/&gt;                &lt;span style="color: #800080;"&gt;0xEC&lt;/span&gt;, &lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;in al, dx&lt;/span&gt;&lt;br/&gt;                &lt;span style="color: #800080;"&gt;0x20&lt;/span&gt;, &lt;span style="color: #800080;"&gt;0xD8&lt;/span&gt;, &lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;and al, bl&lt;/span&gt;&lt;br/&gt;                &lt;span style="color: #800080;"&gt;0xEE&lt;/span&gt;, &lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;out dx, al&lt;/span&gt;&lt;br/&gt;                &lt;span style="color: #800080;"&gt;0x59&lt;/span&gt;, &lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;pop ecx&lt;/span&gt;&lt;br/&gt;                &lt;span style="color: #800080;"&gt;0x5B&lt;/span&gt;, &lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;pop ebx&lt;/span&gt;&lt;br/&gt;&lt;span style="color: #000000;"&gt;            };&lt;br/&gt; &lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;return&lt;/span&gt; InjectASM&amp;lt;WriteBitFunc&amp;gt;&lt;span style="color: #000000;"&gt;(code);&lt;br/&gt;        }&lt;br/&gt; &lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;delegate&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;void&lt;/span&gt;&lt;span style="color: #000000;"&gt; WriteBitFunc(Int16 address, Byte bit);&lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;#endregion&lt;/span&gt;&lt;br/&gt; &lt;br/&gt;        &lt;span style="color: #0000ff;"&gt;#region&lt;/span&gt; 注入汇编&lt;br/&gt;        &lt;span style="color: #0000ff;"&gt;static&lt;/span&gt; T InjectASM&amp;lt;T&amp;gt;&lt;span style="color: #000000;"&gt;(Byte[] code)&lt;br/&gt;        {&lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt; 汇编指令&lt;/span&gt;&lt;br/&gt;            &lt;span style="color: #0000ff;"&gt;var&lt;/span&gt; code1 = &lt;span style="color: #0000ff;"&gt;new&lt;/span&gt;&lt;span style="color: #000000;"&gt; Byte[] {&lt;br/&gt;                &lt;/span&gt;&lt;span style="color: #800080;"&gt;0x55&lt;/span&gt;, &lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;push ebp&lt;/span&gt;&lt;br/&gt;                &lt;span style="color: #800080;"&gt;0x8B&lt;/span&gt;, &lt;span style="color: #800080;"&gt;0xEC&lt;/span&gt;, &lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;mov ebp, esp&lt;/span&gt;&lt;br/&gt;                &lt;span style="color: #800080;"&gt;0x52&lt;/span&gt;, &lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;push edx&lt;/span&gt;&lt;br/&gt;&lt;span style="color: #000000;"&gt;            };&lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;var&lt;/span&gt; code2 = &lt;span style="color: #0000ff;"&gt;new&lt;/span&gt;&lt;span style="color: #000000;"&gt; Byte[] {&lt;br/&gt;                &lt;/span&gt;&lt;span style="color: #800080;"&gt;0x5A&lt;/span&gt;, &lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;pop edx&lt;/span&gt;&lt;br/&gt;                &lt;span style="color: #800080;"&gt;0x8B&lt;/span&gt;, &lt;span style="color: #800080;"&gt;0xE5&lt;/span&gt;, &lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;mov esp, ebp&lt;/span&gt;&lt;br/&gt;                &lt;span style="color: #800080;"&gt;0x5D&lt;/span&gt;, &lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;pop ebp&lt;/span&gt;&lt;br/&gt;                &lt;span style="color: #800080;"&gt;0xC3&lt;/span&gt;  &lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;ret&lt;/span&gt;&lt;br/&gt;&lt;span style="color: #000000;"&gt;            };&lt;br/&gt; &lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;var cbs = new Byte[code1.Length + code.Length + code2.Length];&lt;/span&gt;&lt;br/&gt;            &lt;span style="color: #0000ff;"&gt;var&lt;/span&gt; ms = &lt;span style="color: #0000ff;"&gt;new&lt;/span&gt;&lt;span style="color: #000000;"&gt; MemoryStream();&lt;br/&gt;            ms.Write(code1, &lt;/span&gt;&lt;span style="color: #800080;"&gt;0&lt;/span&gt;&lt;span style="color: #000000;"&gt;, code1.Length);&lt;br/&gt;            ms.Write(code, &lt;/span&gt;&lt;span style="color: #800080;"&gt;0&lt;/span&gt;&lt;span style="color: #000000;"&gt;, code.Length);&lt;br/&gt;            ms.Write(code2, &lt;/span&gt;&lt;span style="color: #800080;"&gt;0&lt;/span&gt;&lt;span style="color: #000000;"&gt;, code2.Length);&lt;br/&gt;            code &lt;/span&gt;=&lt;span style="color: #000000;"&gt; ms.ToArray();&lt;br/&gt; &lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt; 分配内存&lt;/span&gt;&lt;br/&gt;            &lt;span style="color: #0000ff;"&gt;var&lt;/span&gt; ptr =&lt;span style="color: #000000;"&gt; Marshal.AllocHGlobal(code.Length);&lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt; 写入汇编指令&lt;/span&gt;&lt;br/&gt;            Marshal.Copy(code, &lt;span style="color: #800080;"&gt;0&lt;/span&gt;&lt;span style="color: #000000;"&gt;, ptr, code.Length);&lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt; 设为可执行&lt;/span&gt;&lt;br/&gt;&lt;span style="color: #000000;"&gt;            VirtualProtectExecute(ptr, code.Length);&lt;br/&gt; &lt;br/&gt;            Console.WriteLine(&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;0x{0:X8}&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;, ptr.ToInt32());&lt;br/&gt;            Console.ReadKey(&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;true&lt;/span&gt;&lt;span style="color: #000000;"&gt;);&lt;br/&gt;             &lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt; 转为委托&lt;/span&gt;&lt;br/&gt;            &lt;span style="color: #0000ff;"&gt;return&lt;/span&gt; (T)(Object)Marshal.GetDelegateForFunctionPointer(ptr, &lt;span style="color: #0000ff;"&gt;typeof&lt;/span&gt;&lt;span style="color: #000000;"&gt;(T));&lt;br/&gt;        }&lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;#endregion&lt;/span&gt;&lt;br/&gt; &lt;br/&gt;        &lt;span style="color: #0000ff;"&gt;#region&lt;/span&gt; 辅助&lt;br/&gt;        &lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;[DllImport("kernel32.dll", SetLastError = true)]&lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;static extern int VirtualQueryEx(int hProcess, ref object lpAddress, ref MEMORY_BASIC_INFORMATION lpBuffer, int dwLength);&lt;/span&gt;&lt;br/&gt;        [DllImport(&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;kernel32.dll&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;, SetLastError = &lt;span style="color: #0000ff;"&gt;true&lt;/span&gt;&lt;span style="color: #000000;"&gt;)]&lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;static&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;extern&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;int&lt;/span&gt; VirtualProtectEx(IntPtr hProcess, IntPtr lpAddress, &lt;span style="color: #0000ff;"&gt;int&lt;/span&gt; dwSize, &lt;span style="color: #0000ff;"&gt;int&lt;/span&gt; flNewProtect, &lt;span style="color: #0000ff;"&gt;ref&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;int&lt;/span&gt;&lt;span style="color: #000000;"&gt; lpflOldProtect);&lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;static&lt;/span&gt;&lt;span style="color: #000000;"&gt; Boolean VirtualProtectExecute(IntPtr address, Int32 size)&lt;br/&gt;        {&lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;const&lt;/span&gt; Int32 PAGE_EXECUTE_READWRITE = &lt;span style="color: #800080;"&gt;0x40&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&lt;br/&gt;            Int32 old &lt;/span&gt;= &lt;span style="color: #800080;"&gt;0&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;return&lt;/span&gt; VirtualProtectEx(Process.GetCurrentProcess().Handle, address, size, PAGE_EXECUTE_READWRITE, &lt;span style="color: #0000ff;"&gt;ref&lt;/span&gt; old) == &lt;span style="color: #800080;"&gt;0&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&lt;br/&gt;        }&lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;#endregion&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br/&gt;    }&lt;br/&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;/div&gt;&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/nnhy/201205/201205100936083431.png"&gt;&lt;img style="display: inline; border: 0px;" title="image" src="http://images.cnblogs.com/cnblogs_com/nnhy/201205/201205100936084826.png" alt="image" width="553" height="600" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: large;"&gt;这里有个旧版本：&lt;a href="http://bbs.53wb.com/forum.php?mod=viewthread&amp;amp;tid=137"&gt;http://bbs.53wb.com/forum.php?mod=viewthread&amp;amp;tid=137&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/nnhy/aggbug/2493761.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/nnhy/archive/2012/05/10/2493761.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/nnhy/archive/2012/04/27/2473052.html</id><title type="text">NewLife.XCode中如何借助分部抽象多个具有很多共同字段的实体类</title><summary type="text">背景： 两个实体类：租房图片、售房图片 这两个表用于存储房源图片记录，一个房源对应多个图片，两个表的差别就在于一个业务关联字段。 租房图片中的RentID记录这个图片属于哪个租房信息； 售房图片中的S...</summary><published>2012-04-27T01:57:00Z</published><updated>2012-04-27T01:57:00Z</updated><author><name>大石头</name><uri>http://www.cnblogs.com/nnhy/</uri></author><link rel="alternate" href="http://www.cnblogs.com/nnhy/archive/2012/04/27/2473052.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/nnhy/archive/2012/04/27/2473052.html"/><content type="html">&lt;p&gt;&lt;font size="4"&gt;背景：&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font size="4"&gt;两个实体类：租房图片、售房图片&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font size="4"&gt;这两个表用于存储房源图片记录，一个房源对应多个图片，两个表的差别就在于一个业务关联字段。&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font size="4"&gt;租房图片中的RentID记录这个图片属于哪个租房信息；&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font size="4"&gt;售房图片中的SaleID记录这个图片属于哪个售房信息。&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font size="4"&gt;声明：这是二次开发，表结构不是我设计的。&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font size="4"&gt;&lt;/font&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;font size="4"&gt;因为两个实体类的操作极为相似，我们可以提取出来一个接口，进行统一操作。这里只有两个实体类，可能优势不明显，但如果有八个十个呢？&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font size="4"&gt;现在XCoder新模版（2012年3月以后）生成的实体类都是分部类，都对应有一个分部实体接口。&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font size="4"&gt;由于XCode是充血模型，我们可以为这两个实体类做一个统一的基类来达到我的目的，但是这个统一的基类里面无法访问子类的字段，编码上很不方便。&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;&lt;font color="#ff0000" size="4"&gt;这一次，我们用分部接口！&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;&lt;font size="4"&gt;&lt;/font&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;font size="4"&gt;先来看看这两个实体类&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/nnhy/201204/201204270957065998.jpg"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="HZ(`6S)[@XA`7(G52XICO2V" border="0" alt="HZ(`6S)[@XA`7(G52XICO2V" src="http://images.cnblogs.com/cnblogs_com/nnhy/201204/201204270957063838.jpg" width="385" height="356"&gt;&lt;/a&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/nnhy/201204/201204270957064395.jpg"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="4~P2`95HG[NH}Q$@02M`%PV" border="0" alt="4~P2`95HG[NH}Q$@02M`%PV" src="http://images.cnblogs.com/cnblogs_com/nnhy/201204/201204270957062999.jpg" width="377" height="384"&gt;&lt;/a&gt;  &lt;p&gt;&lt;font size="4"&gt;这两个实体类，就RentID和SaleID字段的不同，其它都一样，包括名字、类型、业务意义。&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font size="4"&gt;&lt;/font&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;font size="4"&gt;我们新建一个接口，然后借助分部接口来统一&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/nnhy/201204/201204270957066380.jpg"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="$Y%A1CR697UA67[`WWRKJ88" border="0" alt="$Y%A1CR697UA67[`WWRKJ88" src="http://images.cnblogs.com/cnblogs_com/nnhy/201204/201204270957076936.jpg" width="735" height="260"&gt;&lt;/a&gt;  &lt;p&gt;&lt;font size="4"&gt;如上，通过分部接口，我们无需修改原有的接口文件，即可实现给接口多增加一个继承。&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font size="4"&gt;实际上也不应该修改原有的接口文件，因为原有的接口位于实体类的数据类文件中，那是随时会被新的代码生成覆盖。&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font size="4"&gt;IHouseImage接口里面的属性，是从IRentimage里面拷贝过来，然后删掉RentID&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font size="4"&gt;如果不要那个BizID，那么我们的工作就算完成了，不需要对原有的实体类代码进行任何修改。&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font size="4"&gt;&lt;/font&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;font size="4"&gt;只是还有一点遗憾，不能通过接口操作RentID和SaleID。&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font size="4"&gt;我们来扩展一下，增加一个BizID属性来统一它们，因为两个实体类都没有这个属性的实现，所以我们需要在实体类业务文件那里手工增加实现。&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/nnhy/201204/201204270957071080.jpg"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="NN`ZDJSY(FCF]N%~R%$1HST" border="0" alt="NN`ZDJSY(FCF]N%~R%$1HST" src="http://images.cnblogs.com/cnblogs_com/nnhy/201204/201204270957073589.jpg" width="550" height="72"&gt;&lt;/a&gt;  &lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/nnhy/201204/201204270957072509.jpg"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="J(S`U{DBNSE{PP`L]XNEI(F" border="0" alt="J(S`U{DBNSE{PP`L]XNEI(F" src="http://images.cnblogs.com/cnblogs_com/nnhy/201204/201204270957075017.jpg" width="535" height="75"&gt;&lt;/a&gt;  &lt;p&gt;&lt;font size="4"&gt;&lt;/font&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;font size="4"&gt;大功告成！我们看看怎么用它们。&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/nnhy/201204/201204270957073622.jpg"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="7Q4O)MQ2Z%`Z8~(E`29BRCP" border="0" alt="7Q4O)MQ2Z%`Z8~(E`29BRCP" src="http://images.cnblogs.com/cnblogs_com/nnhy/201204/201204270957071462.jpg" width="689" height="652"&gt;&lt;/a&gt;  &lt;p&gt;&amp;nbsp; &lt;p&gt;&lt;font size="4"&gt;如上，根据不同的类型，创建实体操作者eop。我这里的类型是硬编码，也可以根据业务情况采用别的方式得到类型。&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font size="4"&gt;实体操作者eop表现了事务管理、创建实体entity的操作。&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font size="4"&gt;实体entity是IEntity类型，可以进行添删改等操作。这里为了实体接口的精简和独立，实体接口并没有继承IEntity，实际上实体类都继承了这两个接口。&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font size="4"&gt;所以，我们可以先转为IHouseImage接口，然后随意操作，当然你也可以在接口中增加各种方法。&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font size="4"&gt;&lt;/font&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;font size="4"&gt;好了，结束了！&lt;/font&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/nnhy/aggbug/2473052.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/nnhy/archive/2012/04/27/2473052.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/nnhy/archive/2012/02/27/2369263.html</id><title type="text">XCode之第一次亲密接触</title><summary type="text">NewLife.XCode是一个数据映射框架，包括但大于ORM的范围。XCode意为未知的代码的意思，是整个X系列组件很重要的一员。实际项目开发，会根据项目类型不同，应用场合不同，由多个不同的组件配合发力，这就导致了几乎无法发现XCode在其中的用处，而XCode的学习，也就无从做起。按某朋友的说法：“想看看这个页面怎么工作，结果页面后面一行代码也没有，深入一点发现全是接口！”</summary><published>2012-02-26T16:29:00Z</published><updated>2012-02-26T16:29:00Z</updated><author><name>大石头</name><uri>http://www.cnblogs.com/nnhy/</uri></author><link rel="alternate" href="http://www.cnblogs.com/nnhy/archive/2012/02/27/2369263.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/nnhy/archive/2012/02/27/2369263.html"/><content type="html">&lt;div style="layout-grid:  15.6pt none" class="Section0"&gt; &lt;p class="p0"&gt;&lt;span style="font-family: '宋体'; font-size: 22pt; font-weight: bold; mso-spacerun: 'yes'"&gt;XCode&lt;font face="宋体"&gt;之第一次亲密接触&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: '宋体'; font-size: 22pt; font-weight: bold; mso-spacerun: 'yes'"&gt;&lt;?xml:namespace prefix = o /&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="p0"&gt;&lt;span style="font-family: 'Times New Roman'; font-size: 12pt; mso-spacerun: 'yes'"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="p0"&gt;&lt;span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"&gt;首先得说明，&lt;/span&gt;&lt;span style="font-family: '宋体'; color: rgb(255,0,0); font-size: 12pt; font-weight: bold; mso-spacerun: 'yes'"&gt;本教程仅用于让第一次接触&lt;/span&gt;&lt;span style="font-family: '宋体'; color: rgb(255,0,0); font-size: 12pt; font-weight: bold; mso-spacerun: 'yes'"&gt;XCode&lt;font face="宋体"&gt;的朋友了解&lt;/font&gt;&lt;font face="Times New Roman"&gt;XCode&lt;/font&gt;&lt;font face="宋体"&gt;，不具有任何别的实际意义，真正的项目也不会采取这种开发方式，而采用更先进、快速而强大的开发方式&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"&gt;。&lt;/span&gt;&lt;span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="p0"&gt;&lt;span style="font-family: '宋体'; color: rgb(0,0,255); font-size: 12pt; font-weight: bold; mso-spacerun: 'yes'"&gt;NewLife.XCode&lt;font face="宋体"&gt;是一个数据映射框架，包括但大于&lt;/font&gt;&lt;font face="Times New Roman"&gt;ORM&lt;/font&gt;&lt;font face="宋体"&gt;的范围&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"&gt;。&lt;font face="Times New Roman"&gt;XCode&lt;/font&gt;&lt;font face="宋体"&gt;意为未知的代码的意思，是整个&lt;/font&gt;&lt;font face="Times New Roman"&gt;X&lt;/font&gt;&lt;font face="宋体"&gt;系列组件很重要的一员。实际项目开发，会根据项目类型不同，应用场合不同，由多个不同的组件配合发力，这就导致了几乎无法发现&lt;/font&gt;&lt;font face="Times New Roman"&gt;XCode&lt;/font&gt;&lt;font face="宋体"&gt;在其中的用处，而&lt;/font&gt;&lt;font face="Times New Roman"&gt;XCode&lt;/font&gt;&lt;font face="宋体"&gt;的学习，也就无从做起。按某朋友的说法：“想看看这个页面怎么工作，结果页面后面一行代码也没有，深入一点发现全是接口！”&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="p0"&gt;&lt;span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"&gt;所以，本教程从最最最通俗的做法谈起，先使用纯&lt;font face="Times New Roman"&gt;XCode&lt;/font&gt;&lt;font face="宋体"&gt;实现，然后一步步的引入其它组件，让大伙明明白白最终项目是如何工作的！&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="p0"&gt;&lt;span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"&gt;这次我们做一个最简单的&lt;/span&gt;&lt;span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"&gt;CMS&lt;font face="宋体"&gt;，只有管理员、栏目、文章三张表，字段也是最精简的。后面会针对这个例子，一步步展开，介绍&lt;/font&gt;&lt;font face="Times New Roman"&gt;XCode&lt;/font&gt;&lt;font face="宋体"&gt;的各个主要功能。&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="p0"&gt;&lt;span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"&gt;关于&lt;font face="Times New Roman"&gt;XCode&lt;/font&gt;&lt;font face="宋体"&gt;的层次介绍参看&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;a href="http://www.cnblogs.com/nnhy/archive/2010/09/13/1824666.html"&gt;&lt;span style="font-family: '宋体'; color: rgb(0,0,255); font-size: 12pt; font-weight: bold; text-decoration: underline; mso-spacerun: 'yes'"&gt;《&lt;/span&gt;&lt;span style="font-family: '宋体'; color: rgb(0,0,255); font-size: 12pt; font-weight: bold; text-decoration: underline; mso-spacerun: 'yes'"&gt;O&lt;/span&gt;&lt;span style="font-family: 'Times New Roman'; color: rgb(0,0,255); font-size: 12pt; font-weight: bold; text-decoration: underline; mso-spacerun: 'yes'"&gt;RM&lt;font face="宋体"&gt;组件&lt;/font&gt;&lt;font face="Times New Roman"&gt;XCode&lt;/font&gt;&lt;font face="宋体"&gt;（简介）&lt;/font&gt;&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;span style="font-family: '宋体'; color: rgb(0,0,255); font-size: 12pt; font-weight: bold; text-decoration: underline; mso-spacerun: 'yes'"&gt;》&lt;/span&gt;&lt;span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="p0"&gt;&lt;span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"&gt;作为入门的更有深度的姐妹篇&lt;/span&gt;&lt;span&gt;&lt;a href="http://www.cnblogs.com/nnhy/archive/2010/09/15/1826602.html"&gt;&lt;span style="font-family: '宋体'; color: rgb(0,0,255); font-size: 12pt; font-weight: bold; text-decoration: underline; mso-spacerun: 'yes'"&gt;《&lt;/span&gt;&lt;span style="font-family: '宋体'; color: rgb(0,0,255); font-size: 12pt; font-weight: bold; text-decoration: underline; mso-spacerun: 'yes'"&gt;O&lt;/span&gt;&lt;span style="font-family: 'Times New Roman'; color: rgb(0,0,255); font-size: 12pt; font-weight: bold; text-decoration: underline; mso-spacerun: 'yes'"&gt;RM&lt;font face="宋体"&gt;组件&lt;/font&gt;&lt;font face="Times New Roman"&gt;XCode&lt;/font&gt;&lt;font face="宋体"&gt;（动手）&lt;/font&gt;&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;span style="font-family: '宋体'; color: rgb(0,0,255); font-size: 12pt; font-weight: bold; text-decoration: underline; mso-spacerun: 'yes'"&gt;》&lt;/span&gt;&lt;span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;h1 style="margin-top: 0pt; margin-bottom: 0pt"&gt;&lt;span style="font-family: '宋体'; font-size: 22pt; font-weight: bold; mso-spacerun: 'yes'"&gt;一、&lt;/span&gt;&lt;span style="font-family: '宋体'; font-size: 22pt; font-weight: bold; mso-spacerun: 'yes'"&gt;数据库&lt;/span&gt;&lt;span style="font-family: '宋体'; font-size: 22pt; font-weight: bold; mso-spacerun: 'yes'"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt; &lt;p class="p0"&gt;&lt;span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"&gt;最原始的做法，我们先到&lt;/span&gt;&lt;span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"&gt;MSSQL&lt;font face="宋体"&gt;里面建立好数据表，我这里是&lt;/font&gt;&lt;font face="Times New Roman"&gt;MSSQL2008&lt;/font&gt;&lt;font face="宋体"&gt;，你用别的版本或者别的数据库也没有关系。&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="p0"&gt;&lt;span style="font-family: '宋体'; color: rgb(0,0,255); font-size: 12pt; font-weight: bold; mso-spacerun: 'yes'"&gt;管理员表&lt;/span&gt;&lt;span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"&gt;，只要用户名和密码，我们弄一个自增&lt;font face="Times New Roman"&gt;ID&lt;/font&gt;&lt;font face="宋体"&gt;的字段作为主键。用别的比如&lt;/font&gt;&lt;font face="Times New Roman"&gt;GUID&lt;/font&gt;&lt;font face="宋体"&gt;作为主键也行，最好有一个单一主键，那样会方便一些，后面会讲到。&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="p0"&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/nnhy/201202/201202270028236327.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="wps_clip_image-26243" border="0" alt="wps_clip_image-26243" src="http://images.cnblogs.com/cnblogs_com/nnhy/201202/201202270028233262.png" width="428" height="342"&gt;&lt;/a&gt;&lt;span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="p0"&gt;&lt;span style="font-family: '宋体'; color: rgb(0,0,255); font-size: 12pt; font-weight: bold; mso-spacerun: 'yes'"&gt;栏目表&lt;/span&gt;&lt;span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"&gt;，我们先不考虑多级，只要一级，那样子只需要一个名称字段就足够了。&lt;font color="#ff0000" size="4"&gt;&lt;strong&gt;注意设置ID字段为主键和标识。&lt;/strong&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="p0"&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/nnhy/201202/201202270028237166.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="wps_clip_image-3422" border="0" alt="wps_clip_image-3422" src="http://images.cnblogs.com/cnblogs_com/nnhy/201202/201202270028232149.png" width="366" height="98"&gt;&lt;/a&gt;&lt;span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="p0"&gt;&lt;span style="font-family: '宋体'; color: rgb(0,0,255); font-size: 12pt; font-weight: bold; mso-spacerun: 'yes'"&gt;文章表&lt;/span&gt;&lt;span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"&gt;，需要跟栏目表建立管理关系，然后有标题和内容。&lt;strong&gt;&lt;font color="#ff0000" size="4"&gt;注意设置ID字段为主键和标识。&lt;/font&gt;&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="p0"&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/nnhy/201202/201202270028231277.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="wps_clip_image-16747" border="0" alt="wps_clip_image-16747" src="http://images.cnblogs.com/cnblogs_com/nnhy/201202/201202270028235181.png" width="348" height="130"&gt;&lt;/a&gt;&lt;span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="p0"&gt;&lt;span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"&gt;这样子就建好了最简单的三张表。&lt;/span&gt;&lt;span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;h1 style="margin-top: 0pt; margin-bottom: 0pt"&gt;&lt;span style="font-family: '宋体'; font-size: 22pt; font-weight: bold; mso-spacerun: 'yes'"&gt;二、&lt;/span&gt;&lt;span style="font-family: '宋体'; font-size: 22pt; font-weight: bold; mso-spacerun: 'yes'"&gt;生成实体类&lt;/span&gt;&lt;span style="font-family: '宋体'; font-size: 22pt; font-weight: bold; mso-spacerun: 'yes'"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt; &lt;p class="p0"&gt;&lt;span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"&gt;很多&lt;/span&gt;&lt;span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"&gt;ORM&lt;font face="宋体"&gt;都有配套的代码生成器，&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"&gt;下面我们请出我们的代码生成器&lt;/span&gt;&lt;span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"&gt;XCoder&lt;font face="宋体"&gt;，注意，这里是&lt;/font&gt;&lt;font face="Times New Roman"&gt;XCoder&lt;/font&gt;&lt;font face="宋体"&gt;，意为未知编码者，而前面是&lt;/font&gt;&lt;font face="Times New Roman"&gt;XCode&lt;/font&gt;&lt;font face="宋体"&gt;。这个刚解压后的样子，一个主程序，三个类库，一个配置文件。&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="p0"&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/nnhy/201202/201202270028246261.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="wps_clip_image-8407" border="0" alt="wps_clip_image-8407" src="http://images.cnblogs.com/cnblogs_com/nnhy/201202/201202270028242116.png" width="558" height="236"&gt;&lt;/a&gt;&lt;span style="font-family: 'Times New Roman'; font-size: 12pt; mso-spacerun: 'yes'"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="p0"&gt;&lt;span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"&gt;启动主程序。这里也许它会自动升级，不用担心，升级会自动完成。&lt;/span&gt;&lt;span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="p0"&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/nnhy/201202/201202270028246784.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="wps_clip_image-28552" border="0" alt="wps_clip_image-28552" src="http://images.cnblogs.com/cnblogs_com/nnhy/201202/201202270028242640.png" width="558" height="325"&gt;&lt;/a&gt;&lt;span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="p0"&gt;&lt;span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"&gt;很土的界面，不过没关系啦，这个&lt;/span&gt;&lt;span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"&gt;XCoder&lt;font face="宋体"&gt;就是一个很简单的空壳子（开放源码），真正的使用者会用自己的修改版，或者使用更先进的魔方开发平台。&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="p0"&gt;&lt;span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"&gt;我们看看“连接”右边的下来菜单，看看都有哪些连接：&lt;/span&gt;&lt;span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="p0"&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/nnhy/201202/20120227002824131.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="wps_clip_image-23945" border="0" alt="wps_clip_image-23945" src="http://images.cnblogs.com/cnblogs_com/nnhy/201202/201202270028249259.png" width="306" height="259"&gt;&lt;/a&gt;&lt;span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="p0"&gt;&lt;span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"&gt;这是配置文件里面内置的一些连接，每一种数据库的都有，其实是连接字符串的样板，省得用到时找不到。&lt;font face="Times New Roman"&gt;XCoder&lt;/font&gt;&lt;font face="宋体"&gt;在这里有自动探测功能，能够探测本机的&lt;/font&gt;&lt;font face="Times New Roman"&gt;MSSQL&lt;/font&gt;&lt;font face="宋体"&gt;，本目录的&lt;/font&gt;&lt;font face="Times New Roman"&gt;Access&lt;/font&gt;&lt;font face="宋体"&gt;和&lt;/font&gt;&lt;font face="Times New Roman"&gt;SQLite&lt;/font&gt;&lt;font face="宋体"&gt;。&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="p0"&gt;&lt;span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"&gt;可以看到&lt;font face="Times New Roman"&gt;mssql_CMS&lt;/font&gt;&lt;font face="宋体"&gt;那个就是我们刚才建立的库，为了加深理解，我们手工去配置一下。&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="p0"&gt;&lt;span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"&gt;关闭&lt;font face="Times New Roman"&gt;XCoder&lt;/font&gt;&lt;font face="宋体"&gt;，打开配置文件“&lt;/font&gt;&lt;font face="Times New Roman"&gt;XCoder.exe.config&lt;/font&gt;&lt;font face="宋体"&gt;”：&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="p0"&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/nnhy/201202/201202270028241735.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="wps_clip_image-25206" border="0" alt="wps_clip_image-25206" src="http://images.cnblogs.com/cnblogs_com/nnhy/201202/201202270028284752.png" width="647" height="531"&gt;&lt;/a&gt;&lt;span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="p0"&gt;&lt;span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"&gt;这里是最常用的一些设置，我们重点看连接字符串部分，增加一个名为&lt;font face="Times New Roman"&gt;CMS&lt;/font&gt;&lt;font face="宋体"&gt;的连接：&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="p0"&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/nnhy/201202/201202270028492506.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="wps_clip_image-3922" border="0" alt="wps_clip_image-3922" src="http://images.cnblogs.com/cnblogs_com/nnhy/201202/201202270028495538.png" width="646" height="80"&gt;&lt;/a&gt;&lt;span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="p0"&gt;&lt;span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"&gt;这个&lt;font face="Times New Roman"&gt;name&lt;/font&gt;&lt;font face="宋体"&gt;就是在连接名，将会在前面代码生成器界面的“连接”下拉里面列出。重新打开代码生成器看看：&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="p0"&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/nnhy/201202/201202270028494982.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="wps_clip_image-7305" border="0" alt="wps_clip_image-7305" src="http://images.cnblogs.com/cnblogs_com/nnhy/201202/201202270028491601.png" width="393" height="303"&gt;&lt;/a&gt;&lt;span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="p0"&gt;&lt;span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"&gt;我们刚添加的&lt;font face="Times New Roman"&gt;CMS&lt;/font&gt;&lt;font face="宋体"&gt;在第一位，后面也多了好些，我们不用去管它。&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="p0"&gt;&lt;span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"&gt;点击“连接”按钮吧，下面的数据表选择就激活了：&lt;/span&gt;&lt;span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="p0"&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/nnhy/201202/201202270028494949.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="wps_clip_image-9588" border="0" alt="wps_clip_image-9588" src="http://images.cnblogs.com/cnblogs_com/nnhy/201202/201202270028496028.png" width="424" height="229"&gt;&lt;/a&gt;&lt;span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="p0"&gt;&lt;span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"&gt;这里可以见到我们刚才添加的三张表。右边的两个生成按钮也亮了，也就是说可以生成了。不过先别着急，我们看看下面的各个设置框，重点是右边的模版：&lt;/span&gt;&lt;span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="p0"&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/nnhy/201202/201202270028493520.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="wps_clip_image-29999" border="0" alt="wps_clip_image-29999" src="http://images.cnblogs.com/cnblogs_com/nnhy/201202/201202270028509376.png" width="530" height="158"&gt;&lt;/a&gt;&lt;span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="p0"&gt;&lt;span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"&gt;先看右边的模版，有六个带星号开头的模版，星号表示内置模版，如果感兴趣，可以点右边的“释放内置模版”按钮，把它们释放出来到文件中，学习一下怎么写模版也行，这里就不多说了。&lt;/span&gt;&lt;span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="p0"&gt;&lt;span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"&gt;这次我们主要是想生成实体类代码，要用到实体数据和实体业务两个模版，因为一个实体类由两个文件采用分部类的方式组成，如果修改了数据库表结构，下次只需要生成实体数据那个文件即可，而开发者自己写的代码都写在实体业务那个文件里面。&lt;/span&gt;&lt;span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="p0"&gt;&lt;span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"&gt;我们修改一下左边的设置：&lt;/span&gt;&lt;span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="p0"&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/nnhy/201202/201202270028502092.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="wps_clip_image-4600" border="0" alt="wps_clip_image-4600" src="http://images.cnblogs.com/cnblogs_com/nnhy/201202/201202270028509583.png" width="535" height="157"&gt;&lt;/a&gt;&lt;span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="p0"&gt;&lt;span style="font-family: '宋体'; color: rgb(0,0,255); font-size: 12pt; font-weight: bold; mso-spacerun: 'yes'"&gt;命名空间&lt;/span&gt;&lt;span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"&gt;就是要生成的实体类的命名空间，&lt;/span&gt;&lt;span style="font-family: '宋体'; color: rgb(0,0,255); font-size: 12pt; font-weight: bold; mso-spacerun: 'yes'"&gt;连接名&lt;/span&gt;&lt;span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"&gt;也是实体类里面的一个模版变量，&lt;/span&gt;&lt;span style="font-family: '宋体'; color: rgb(0,0,255); font-size: 12pt; font-weight: bold; mso-spacerun: 'yes'"&gt;输出目录&lt;/span&gt;&lt;span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"&gt;自然就是实体类文件要存放的目录啦，相对于代码生成器根目录。&lt;/span&gt;&lt;span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="p0"&gt;&lt;span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"&gt;一切准备就绪，选择实体数据模版，点击“生成所有表”按钮，然后换成实体业务模版，再生成所有一次。&lt;/span&gt;&lt;span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="p0"&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/nnhy/201202/20120227002850979.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="wps_clip_image-30042" border="0" alt="wps_clip_image-30042" src="http://images.cnblogs.com/cnblogs_com/nnhy/201202/20120227002850422.png" width="529" height="351"&gt;&lt;/a&gt;&lt;span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="p0"&gt;&lt;span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"&gt;下面我们去看看&lt;/span&gt;&lt;span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"&gt;MyCMS&lt;font face="宋体"&gt;目录，我们生成的东西在那：&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="p0"&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/nnhy/201202/201202270028507914.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="wps_clip_image-17645" border="0" alt="wps_clip_image-17645" src="http://images.cnblogs.com/cnblogs_com/nnhy/201202/201202270028505406.png" width="357" height="194"&gt;&lt;/a&gt;&lt;span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="p0"&gt;&lt;span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"&gt;都在这！每个表两个文件，带&lt;font face="Times New Roman"&gt;Biz&lt;/font&gt;&lt;font face="宋体"&gt;的是业务文件，供手写代码的，另一个就是数据文件，方便数据表结构变更时重新生成覆盖。&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="p0"&gt;&lt;span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"&gt;先看看实体数据文件：&lt;/span&gt;&lt;span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="p0"&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/nnhy/201202/201202270028514501.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="wps_clip_image-13370" border="0" alt="wps_clip_image-13370" src="http://images.cnblogs.com/cnblogs_com/nnhy/201202/201202270028516976.png" width="647" height="450"&gt;&lt;/a&gt;&lt;span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="p0"&gt;&lt;span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"&gt;上面这个命名空间，就是刚才代码生成器那里填写的；下面这个&lt;font face="Times New Roman"&gt;ConnName&lt;/font&gt;&lt;font face="宋体"&gt;就是代码生成器那里填写的连接名。&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="p0"&gt;&lt;span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"&gt;再看看实体业务文件：&lt;/span&gt;&lt;span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="p0"&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/nnhy/201202/201202270028516420.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="wps_clip_image-10933" border="0" alt="wps_clip_image-10933" src="http://images.cnblogs.com/cnblogs_com/nnhy/201202/201202270028515863.png" width="371" height="341"&gt;&lt;/a&gt;&lt;span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="p0"&gt;&lt;span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"&gt;命名空间和类型，跟数据实体是一样的，注意那个&lt;font face="Times New Roman"&gt;partial&lt;/font&gt;&lt;font face="宋体"&gt;关键字，表示分部类的意思，一个类分成两个文件存放。绝大部分&lt;/font&gt;&lt;font face="Times New Roman"&gt;ORM&lt;/font&gt;&lt;font face="宋体"&gt;的实体类都这么干。&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="p0"&gt;&lt;span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"&gt;这个类继承自&lt;font face="Times New Roman"&gt;Entity&amp;lt;Admin&amp;gt;&lt;/font&gt;&lt;font face="宋体"&gt;，其中&lt;/font&gt;&lt;font face="Times New Roman"&gt;Entity&amp;lt;&amp;gt;&lt;/font&gt;&lt;font face="宋体"&gt;是泛型基类，也就是&lt;/font&gt;&lt;font face="Times New Roman"&gt;XCode&lt;/font&gt;&lt;font face="宋体"&gt;实体层的核心，实体类的绝大部分功能都由它提供。这个对应于代码生成器上的“实体基类”，有些时候可能需要使用自己的实体基类。&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="p0"&gt;&lt;span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"&gt;下面有很多代码段，里面几乎都是一些注释，告诉用户最常用的一些功能怎么用怎么写。&lt;/span&gt;&lt;span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="p0"&gt;&lt;span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;h1 style="margin-top: 0pt; margin-bottom: 0pt"&gt;&lt;span style="font-family: '宋体'; font-size: 22pt; font-weight: bold; mso-spacerun: 'yes'"&gt;三、&lt;/span&gt;&lt;span style="font-family: '宋体'; font-size: 22pt; font-weight: bold; mso-spacerun: 'yes'"&gt;建立站点&lt;/span&gt;&lt;span style="font-family: '宋体'; font-size: 22pt; font-weight: bold; mso-spacerun: 'yes'"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt; &lt;p class="p0"&gt;&lt;span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"&gt;实体类都生成好了，我们开始建立项目吧。一个&lt;/span&gt;&lt;span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"&gt;CMS&lt;font face="宋体"&gt;解决方案，包括一个&lt;/font&gt;&lt;font face="Times New Roman"&gt;CMS&lt;/font&gt;&lt;font face="宋体"&gt;类库和一个&lt;/font&gt;&lt;font face="Times New Roman"&gt;Web&lt;/font&gt;&lt;font face="宋体"&gt;站点（&lt;/font&gt;&lt;font face="Times New Roman"&gt;Website&lt;/font&gt;&lt;font face="宋体"&gt;）。&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="p0"&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/nnhy/201202/201202270028517259.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="wps_clip_image-7889" border="0" alt="wps_clip_image-7889" src="http://images.cnblogs.com/cnblogs_com/nnhy/201202/201202270028519418.png" width="219" height="191"&gt;&lt;/a&gt;&lt;span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="p0"&gt;&lt;span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"&gt;把那个&lt;font face="Times New Roman"&gt;Class1.cs&lt;/font&gt;&lt;font face="宋体"&gt;删了，把上面生成的实体类文件放进去，设置站点&lt;/font&gt;&lt;font face="Times New Roman"&gt;Web&lt;/font&gt;&lt;font face="宋体"&gt;引用类库&lt;/font&gt;&lt;font face="Times New Roman"&gt;CMS&lt;/font&gt;&lt;font face="宋体"&gt;。&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="p0"&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/nnhy/201202/201202270028513322.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="wps_clip_image-3530" border="0" alt="wps_clip_image-3530" src="http://images.cnblogs.com/cnblogs_com/nnhy/201202/201202270028514402.png" width="233" height="350"&gt;&lt;/a&gt;&lt;span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="p0"&gt;&lt;span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"&gt;开始编译一下看看。&lt;/span&gt;&lt;span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="p0"&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/nnhy/201202/201202270028526877.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="wps_clip_image-10536" border="0" alt="wps_clip_image-10536" src="http://images.cnblogs.com/cnblogs_com/nnhy/201202/201202270028521304.png" width="646" height="288"&gt;&lt;/a&gt;&lt;span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="p0"&gt;&lt;span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"&gt;真是壮观呀！原来是我们忘记引用&lt;font face="Times New Roman"&gt;XCode&lt;/font&gt;&lt;font face="宋体"&gt;了。把我们准备好的&lt;/font&gt;&lt;font face="Times New Roman"&gt;DLL&lt;/font&gt;&lt;font face="宋体"&gt;放进来，跟&lt;/font&gt;&lt;font face="Times New Roman"&gt;Web&lt;/font&gt;&lt;font face="宋体"&gt;和&lt;/font&gt;&lt;font face="Times New Roman"&gt;CMS&lt;/font&gt;&lt;font face="宋体"&gt;目录并排。（&lt;/font&gt;&lt;font face="Times New Roman"&gt;XCode.dll&lt;/font&gt;&lt;font face="宋体"&gt;依赖于核心库&lt;/font&gt;&lt;font face="Times New Roman"&gt;NewLife.Core.dll&lt;/font&gt;&lt;font face="宋体"&gt;）&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="p0"&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/nnhy/201202/201202270028524336.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="wps_clip_image-32671" border="0" alt="wps_clip_image-32671" src="http://images.cnblogs.com/cnblogs_com/nnhy/201202/20120227002852191.png" width="423" height="254"&gt;&lt;/a&gt;&lt;span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="p0"&gt;&lt;span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"&gt;类库&lt;font face="Times New Roman"&gt;CMS&lt;/font&gt;&lt;font face="宋体"&gt;引用这两个&lt;/font&gt;&lt;font face="Times New Roman"&gt;DLL&lt;/font&gt;&lt;font face="宋体"&gt;，网站就不需要引用了，因为网站引用了类库，&lt;/font&gt;&lt;font face="Times New Roman"&gt;XCode&lt;/font&gt;&lt;font face="宋体"&gt;那些会跟着过来的。再编译！&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="p0"&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/nnhy/201202/201202270028523223.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="wps_clip_image-7729" border="0" alt="wps_clip_image-7729" src="http://images.cnblogs.com/cnblogs_com/nnhy/201202/201202270028524303.png" width="228" height="528"&gt;&lt;/a&gt;&lt;span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="p0"&gt;&lt;span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"&gt;这回编译通过了！&lt;/span&gt;&lt;span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="p0"&gt;&lt;span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"&gt;给&lt;font face="Times New Roman"&gt;web.config&lt;/font&gt;&lt;font face="宋体"&gt;设置一些常用设置，当然最重要的就是数据库连接字符串；&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="p0"&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/nnhy/201202/201202270028528206.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="wps_clip_image-18823" border="0" alt="wps_clip_image-18823" src="http://images.cnblogs.com/cnblogs_com/nnhy/201202/201202270028535698.png" width="574" height="250"&gt;&lt;/a&gt;&lt;span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="p0"&gt;&lt;span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"&gt;打开全局调试开关和&lt;font face="Times New Roman"&gt;XCode&lt;/font&gt;&lt;font face="宋体"&gt;调试开关，主要是为了看到完整的&lt;/font&gt;&lt;font face="Times New Roman"&gt;XCode&lt;/font&gt;&lt;font face="宋体"&gt;工作日志。&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="p0"&gt;&lt;span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"&gt;我们先在默认页&lt;font face="Times New Roman"&gt;Default.aspx&lt;/font&gt;&lt;font face="宋体"&gt;写一段测试代码看看，同时也是给系统增加一个管理员帐号：&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="p0"&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/nnhy/201202/20120227002853682.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="wps_clip_image-11153" border="0" alt="wps_clip_image-11153" src="http://images.cnblogs.com/cnblogs_com/nnhy/201202/201202270028531761.png" width="464" height="336"&gt;&lt;/a&gt;&lt;span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="p0"&gt;&lt;span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"&gt;这段代码很简单，调用实体类的静态方法&lt;font face="Times New Roman"&gt;Find&lt;/font&gt;&lt;font face="宋体"&gt;去查找&lt;/font&gt;&lt;font face="Times New Roman"&gt;UserName&lt;/font&gt;&lt;font face="宋体"&gt;为&lt;/font&gt;&lt;font face="Times New Roman"&gt;admin&lt;/font&gt;&lt;font face="宋体"&gt;的对象，如果没找到，就实例化一个，然后分别给两个属性赋值，再保存&lt;/font&gt;&lt;font face="Times New Roman"&gt;Save&lt;/font&gt;&lt;font face="宋体"&gt;回去，这样子就往数据库插入了一条记录。&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="p0"&gt;&lt;span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"&gt;不要忘了引用实体类的命名空间“&lt;font face="Times New Roman"&gt;NewLife.CMS&lt;/font&gt;&lt;font face="宋体"&gt;”，这样才能使用实体类&lt;/font&gt;&lt;font face="Times New Roman"&gt;Admin&lt;/font&gt;&lt;font face="宋体"&gt;。&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="p0"&gt;&lt;span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"&gt;这算是第一段使用&lt;font face="Times New Roman"&gt;XCode&lt;/font&gt;&lt;font face="宋体"&gt;的代码，赶紧的预览页面看看效果：&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="p0"&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/nnhy/201202/201202270028539569.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="wps_clip_image-11715" border="0" alt="wps_clip_image-11715" src="http://images.cnblogs.com/cnblogs_com/nnhy/201202/20120227002853649.png" width="323" height="123"&gt;&lt;/a&gt;&lt;span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="p0"&gt;&lt;span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"&gt;执行成功！到这里，一个只有实体类的空白站点就建立了。&lt;/span&gt;&lt;span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="p0"&gt;&lt;span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;h1 style="margin-top: 0pt; margin-bottom: 0pt"&gt;&lt;span style="font-family: '宋体'; font-size: 22pt; font-weight: bold; mso-spacerun: 'yes'"&gt;四、&lt;/span&gt;&lt;span style="font-family: '宋体'; font-size: 22pt; font-weight: bold; mso-spacerun: 'yes'"&gt;后台登录&lt;/span&gt;&lt;span style="font-family: '宋体'; font-size: 22pt; font-weight: bold; mso-spacerun: 'yes'"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt; &lt;p class="p0"&gt;&lt;span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"&gt;建立一个后台目录&lt;/span&gt;&lt;span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"&gt;Admin&lt;font face="宋体"&gt;，包括后台首页&lt;/font&gt;&lt;font face="Times New Roman"&gt;Default.aspx&lt;/font&gt;&lt;font face="宋体"&gt;和登录页&lt;/font&gt;&lt;font face="Times New Roman"&gt;Login.aspx&lt;/font&gt;&lt;font face="宋体"&gt;。&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="p0"&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/nnhy/201202/201202270028533680.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="wps_clip_image-28905" border="0" alt="wps_clip_image-28905" src="http://images.cnblogs.com/cnblogs_com/nnhy/201202/201202270028531172.png" width="251" height="227"&gt;&lt;/a&gt;&lt;span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="p0"&gt;&lt;span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"&gt;设计登录页，登录成功后跳转到后台首页。后台首页如果发现没有登录就跳转到登录页。&lt;/span&gt;&lt;span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="p0"&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/nnhy/201202/201202270028539187.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="wps_clip_image-16944" border="0" alt="wps_clip_image-16944" src="http://images.cnblogs.com/cnblogs_com/nnhy/201202/201202270028542534.png" width="647" height="368"&gt;&lt;/a&gt;&lt;span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="p0"&gt;&lt;span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"&gt;这里也不要忘了引用实体类命名空间“&lt;/span&gt;&lt;span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"&gt;NewLife.CMS&lt;/span&gt;&lt;span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"&gt;”。预览页面看看效果！&lt;/span&gt;&lt;span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="p0"&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/nnhy/201202/201202270028541978.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="wps_clip_image-22115" border="0" alt="wps_clip_image-22115" src="http://images.cnblogs.com/cnblogs_com/nnhy/201202/201202270028541106.png" width="362" height="188"&gt;&lt;/a&gt;&lt;span style="font-family: 'Times New Roman'; font-size: 12pt; mso-spacerun: 'yes'"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="p0"&gt;&lt;span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"&gt;关于&lt;/span&gt;&lt;span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"&gt;XCode&lt;font face="宋体"&gt;里面添删改查等完整代码操作参看&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;a href="http://www.cnblogs.com/nnhy/archive/2010/09/12/1824349.html"&gt;&lt;span style="font-family: '宋体'; color: rgb(0,0,255); font-size: 12pt; font-weight: bold; text-decoration: underline; mso-spacerun: 'yes'"&gt;《&lt;/span&gt;&lt;span style="font-family: '宋体'; color: rgb(0,0,255); font-size: 12pt; font-weight: bold; text-decoration: underline; mso-spacerun: 'yes'"&gt;O&lt;/span&gt;&lt;span style="font-family: 'Times New Roman'; color: rgb(0,0,255); font-size: 12pt; font-weight: bold; text-decoration: underline; mso-spacerun: 'yes'"&gt;RM&lt;font face="宋体"&gt;组件&lt;/font&gt;&lt;font face="Times New Roman"&gt;XCode&lt;/font&gt;&lt;font face="宋体"&gt;（速览）&lt;/font&gt;&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;span style="font-family: '宋体'; color: rgb(0,0,255); font-size: 12pt; font-weight: bold; text-decoration: underline; mso-spacerun: 'yes'"&gt;》&lt;/span&gt;&lt;span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;h1 style="margin-top: 0pt; margin-bottom: 0pt"&gt;&lt;span style="font-family: '宋体'; font-size: 22pt; font-weight: bold; mso-spacerun: 'yes'"&gt;五、&lt;/span&gt;&lt;span style="font-family: '宋体'; font-size: 22pt; font-weight: bold; mso-spacerun: 'yes'"&gt;建立后台&lt;/span&gt;&lt;span style="font-family: '宋体'; font-size: 22pt; font-weight: bold; mso-spacerun: 'yes'"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt; &lt;p class="p0"&gt;&lt;span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"&gt;我们在后台目录&lt;/span&gt;&lt;span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"&gt;Admin&lt;font face="宋体"&gt;中增加一个用来管理管理员的页面&lt;/font&gt;&lt;font face="Times New Roman"&gt;Admin.aspx&lt;/font&gt;&lt;font face="宋体"&gt;，然后调整一下后台首页&lt;/font&gt;&lt;font face="Times New Roman"&gt;Default.aspx&lt;/font&gt;&lt;font face="宋体"&gt;，让它作为后台导航页，通过菜单链接到其它管理页面&lt;/font&gt;&lt;font face="Times New Roman"&gt;Admin.aspx&lt;/font&gt;&lt;font face="宋体"&gt;和&lt;/font&gt;&lt;font face="Times New Roman"&gt;AdminForm.aspx&lt;/font&gt;&lt;font face="宋体"&gt;。&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="p0"&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/nnhy/201202/201202270028548598.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="wps_clip_image-14629" border="0" alt="wps_clip_image-14629" src="http://images.cnblogs.com/cnblogs_com/nnhy/201202/201202270028547485.png" width="212" height="237"&gt;&lt;/a&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/nnhy/201202/201202270028544977.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="wps_clip_image-19583" border="0" alt="wps_clip_image-19583" src="http://images.cnblogs.com/cnblogs_com/nnhy/201202/201202270028542468.png" width="346" height="191"&gt;&lt;/a&gt;&lt;span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="p0"&gt;&lt;span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"&gt;下面开始设计&lt;/span&gt;&lt;span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"&gt;Admin.aspx&lt;font face="宋体"&gt;，这个作为一个列表页，把该表所有数据列出来。我们采用经典的&lt;/font&gt;&lt;font face="Times New Roman"&gt;GridView+ObjectDataSource&lt;/font&gt;&lt;font face="宋体"&gt;来实现。&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="p0"&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/nnhy/201202/201202270028554072.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="wps_clip_image-21121" border="0" alt="wps_clip_image-21121" src="http://images.cnblogs.com/cnblogs_com/nnhy/201202/201202270028555467.png" width="541" height="488"&gt;&lt;/a&gt;&lt;span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="p0"&gt;&lt;span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"&gt;如果你是第一次使用&lt;font face="Times New Roman"&gt;ObjectDataSource&lt;/font&gt;&lt;font face="宋体"&gt;，这里可要看好了。&lt;/font&gt;&lt;font face="Times New Roman"&gt;ObjectDataSource&lt;/font&gt;&lt;font face="宋体"&gt;的右边有个智能标记，一个小箭头，可以点开。我们选择“配置数据源”，看看神奇的一幕。&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="p0"&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/nnhy/201202/201202270028559371.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="wps_clip_image-26489" border="0" alt="wps_clip_image-26489" src="http://images.cnblogs.com/cnblogs_com/nnhy/201202/201202270028556862.png" width="564" height="160"&gt;&lt;/a&gt;&lt;span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="p0"&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/nnhy/201202/201202270028552926.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="wps_clip_image-15874" border="0" alt="wps_clip_image-15874" src="http://images.cnblogs.com/cnblogs_com/nnhy/201202/201202270028551497.png" width="646" height="270"&gt;&lt;/a&gt;&lt;span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="p0"&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/nnhy/201202/201202270028557353.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="wps_clip_image-6855" border="0" alt="wps_clip_image-6855" src="http://images.cnblogs.com/cnblogs_com/nnhy/201202/201202270028554845.png" width="432" height="265"&gt;&lt;/a&gt;&lt;span style="font-family: 'Times New Roman'; font-size: 12pt; mso-spacerun: 'yes'"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="p0"&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/nnhy/201202/201202270028565924.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="wps_clip_image-16717" border="0" alt="wps_clip_image-16717" src="http://images.cnblogs.com/cnblogs_com/nnhy/201202/201202270028564812.png" width="647" height="366"&gt;&lt;/a&gt;&lt;span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="p0"&gt;&lt;span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"&gt;ObjectDataSource&lt;font face="宋体"&gt;的设计界面列出来我们的所有实体类，&lt;/font&gt;&lt;font face="Times New Roman"&gt;Select&lt;/font&gt;&lt;font face="宋体"&gt;那里列出来一个&lt;/font&gt;&lt;font face="Times New Roman"&gt;Search&lt;/font&gt;&lt;font face="宋体"&gt;方法（&lt;/font&gt;&lt;font face="Times New Roman"&gt;XCode&lt;/font&gt;&lt;font face="宋体"&gt;的&lt;/font&gt;&lt;font face="Times New Roman"&gt;Entity&amp;lt;&amp;gt;&lt;/font&gt;&lt;font face="宋体"&gt;基类内置），还有&lt;/font&gt;&lt;font face="Times New Roman"&gt;Update&lt;/font&gt;&lt;font face="宋体"&gt;、&lt;/font&gt;&lt;font face="Times New Roman"&gt;Insert&lt;/font&gt;&lt;font face="宋体"&gt;和&lt;/font&gt;&lt;font face="Times New Roman"&gt;Delete&lt;/font&gt;&lt;font face="宋体"&gt;也有（也是内置）。我们先默认，一路下去。（在这里，各个&lt;/font&gt;&lt;font face="Times New Roman"&gt;DLL&lt;/font&gt;&lt;font face="宋体"&gt;的版本一定要对应，重点是&lt;/font&gt;&lt;font face="Times New Roman"&gt;XCode.dll&lt;/font&gt;&lt;font face="宋体"&gt;和&lt;/font&gt;&lt;font face="Times New Roman"&gt;NewLife.Core.dll&lt;/font&gt;&lt;font face="宋体"&gt;，否则&lt;/font&gt;&lt;font face="Times New Roman"&gt;ObjectDataSource&lt;/font&gt;&lt;font face="宋体"&gt;将可能无法列出实体类）&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="p0"&gt;&lt;span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"&gt;选择&lt;font face="Times New Roman"&gt;GridView&lt;/font&gt;&lt;font face="宋体"&gt;，打开智能标记，选择数据源为下面这个&lt;/font&gt;&lt;font face="Times New Roman"&gt;ObjectDataSource&lt;/font&gt;&lt;font face="宋体"&gt;。&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="p0"&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/nnhy/201202/201202270028561431.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="wps_clip_image-15728" border="0" alt="wps_clip_image-15728" src="http://images.cnblogs.com/cnblogs_com/nnhy/201202/201202270028568923.png" width="495" height="237"&gt;&lt;/a&gt;&lt;span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="p0"&gt;&lt;span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"&gt;预览看看效果：&lt;/span&gt;&lt;span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="p0"&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/nnhy/201202/201202270028598593.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="wps_clip_image-18264" border="0" alt="wps_clip_image-18264" src="http://images.cnblogs.com/cnblogs_com/nnhy/201202/201202270028594448.png" width="359" height="190"&gt;&lt;/a&gt;&lt;span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="p0"&gt;&lt;span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"&gt;出来了！没有写一行代码，数据就列出来了。&lt;/span&gt;&lt;span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="p0"&gt;&lt;span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"&gt;我们修改一下根目录的&lt;font face="Times New Roman"&gt;Default.aspx&lt;/font&gt;&lt;font face="宋体"&gt;，往数据库里面添加&lt;/font&gt;&lt;font face="Times New Roman"&gt;50&lt;/font&gt;&lt;font face="宋体"&gt;个管理员数据。&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="p0"&gt;&lt;span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"&gt;（&lt;font face="Times New Roman"&gt;Admin.Meta.Count&lt;/font&gt;&lt;font face="宋体"&gt;是返回&lt;/font&gt;&lt;font face="Times New Roman"&gt;Admin&lt;/font&gt;&lt;font face="宋体"&gt;实体对应的数据表的总记录数）&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="p0"&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/nnhy/201202/201202270028593576.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="wps_clip_image-1624" border="0" alt="wps_clip_image-1624" src="http://images.cnblogs.com/cnblogs_com/nnhy/201202/201202270028599432.png" width="440" height="236"&gt;&lt;/a&gt;&lt;span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="p0"&gt;&lt;span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"&gt;现在再来看看前面的管理员列表&lt;/span&gt;&lt;span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="p0"&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/nnhy/201202/20120227002859512.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="wps_clip_image-27676" border="0" alt="wps_clip_image-27676" src="http://images.cnblogs.com/cnblogs_com/nnhy/201202/201202270028594415.png" width="363" height="378"&gt;&lt;/a&gt;&lt;span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="p0"&gt;&lt;span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"&gt;全都列出来了，但是没有分页呀。&lt;/span&gt;&lt;span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="p0"&gt;&lt;span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"&gt;现在开始设置一下&lt;font face="Times New Roman"&gt;ObjectDataSource&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="p0"&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/nnhy/201202/201202270029005495.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="wps_clip_image-26550" border="0" alt="wps_clip_image-26550" src="http://images.cnblogs.com/cnblogs_com/nnhy/201202/201202270029004939.png" width="243" height="168"&gt;&lt;/a&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/nnhy/201202/201202270029006019.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="wps_clip_image-28329" border="0" alt="wps_clip_image-28329" src="http://images.cnblogs.com/cnblogs_com/nnhy/201202/201202270029009922.png" width="215" height="170"&gt;&lt;/a&gt;&lt;span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="p0"&gt;&lt;span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"&gt;EnablePaging&lt;font face="宋体"&gt;设为&lt;/font&gt;&lt;font face="Times New Roman"&gt;true&lt;/font&gt;&lt;font face="宋体"&gt;，表示支持分页，&lt;/font&gt;&lt;font face="Times New Roman"&gt;SelectCountMethod&lt;/font&gt;&lt;font face="宋体"&gt;设为&lt;/font&gt;&lt;font face="Times New Roman"&gt;SearchCount&lt;/font&gt;&lt;font face="宋体"&gt;，这个也是实体基类内置方法，它跟前面的&lt;/font&gt;&lt;font face="Times New Roman"&gt;Search&lt;/font&gt;&lt;font face="宋体"&gt;方法是一对，具有完全相同的参数列表，&lt;/font&gt;&lt;font face="Times New Roman"&gt;startRowIndex&lt;/font&gt;&lt;font face="宋体"&gt;和&lt;/font&gt;&lt;font face="Times New Roman"&gt;maximumRows&lt;/font&gt;&lt;font face="宋体"&gt;就是其中的两个。&lt;/font&gt;&lt;font face="Times New Roman"&gt;SortParameterName&lt;/font&gt;&lt;font face="宋体"&gt;设为&lt;/font&gt;&lt;font face="Times New Roman"&gt;orderClause&lt;/font&gt;&lt;font face="宋体"&gt;，表示排序的那一个参数，也是&lt;/font&gt;&lt;font face="Times New Roman"&gt;Search&lt;/font&gt;&lt;font face="宋体"&gt;的参数之一。&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="p0"&gt;&lt;span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"&gt;再来设置一下&lt;/span&gt;&lt;span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"&gt;GridView&lt;font face="宋体"&gt;，点开智能标记，选择分页、排序、编辑、删除&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="p0"&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/nnhy/201202/201202270029009889.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="wps_clip_image-11072" border="0" alt="wps_clip_image-11072" src="http://images.cnblogs.com/cnblogs_com/nnhy/201202/20120227002900413.png" width="647" height="347"&gt;&lt;/a&gt;&lt;span style="font-family: 'Times New Roman'; font-size: 12pt; mso-spacerun: 'yes'"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="p0"&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/nnhy/201202/201202270029006268.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="wps_clip_image-1304" border="0" alt="wps_clip_image-1304" src="http://images.cnblogs.com/cnblogs_com/nnhy/201202/20120227002901936.png" width="238" height="174"&gt;&lt;/a&gt;&lt;span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="p0"&gt;&lt;span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"&gt;把属性&lt;font face="Times New Roman"&gt;DataKeyNames&lt;/font&gt;&lt;font face="宋体"&gt;设置为&lt;/font&gt;&lt;font face="Times New Roman"&gt;ID&lt;/font&gt;&lt;font face="宋体"&gt;，也就是实体类的主键。赶紧看看效果！&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="p0"&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/nnhy/201202/201202270029016792.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="wps_clip_image-31971" border="0" alt="wps_clip_image-31971" src="http://images.cnblogs.com/cnblogs_com/nnhy/201202/20120227002901903.png" width="418" height="340"&gt;&lt;/a&gt;&lt;span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="p0"&gt;&lt;span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"&gt;分页有了，每一行多了编辑和删除，列头也变成蓝色可选。&lt;/span&gt;&lt;span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="p0"&gt;&lt;span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"&gt;下面试试基本操作，同时附上日志文件（网站根目录下的&lt;font face="Times New Roman"&gt;Log&lt;/font&gt;&lt;font face="宋体"&gt;目录）中的&lt;/font&gt;&lt;font face="Times New Roman"&gt;SQL&lt;/font&gt;&lt;font face="宋体"&gt;语句。先看分页&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="p0"&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/nnhy/201202/201202270029019790.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="wps_clip_image-10491" border="0" alt="wps_clip_image-10491" src="http://images.cnblogs.com/cnblogs_com/nnhy/201202/201202270029012822.png" width="422" height="342"&gt;&lt;/a&gt;&lt;span style="font-family: 'Times New Roman'; font-size: 10.5pt; mso-spacerun: 'yes'"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="p0"&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/nnhy/201202/201202270029017249.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="wps_clip_image-16375" border="0" alt="wps_clip_image-16375" src="http://images.cnblogs.com/cnblogs_com/nnhy/201202/201202270029026692.png" width="646" height="122"&gt;&lt;/a&gt;&lt;span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="p0"&gt;&lt;span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"&gt;准确跳到第三页！后面有第一页和第三页的查询语句，&lt;font face="Times New Roman"&gt;XCode&lt;/font&gt;&lt;font face="宋体"&gt;能够根据当前使用的数据库和版本自动生成性能最优的分页语句。&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="p0"&gt;&lt;span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"&gt;再试试编辑&lt;font face="Times New Roman"&gt;ID=30&lt;/font&gt;&lt;font face="宋体"&gt;的数据，并更新回去&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="p0"&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/nnhy/201202/201202270029026136.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="wps_clip_image-26666" border="0" alt="wps_clip_image-26666" src="http://images.cnblogs.com/cnblogs_com/nnhy/201202/20120227002902804.png" width="487" height="166"&gt;&lt;/a&gt;&lt;span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="p0"&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/nnhy/201202/201202270029028611.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="wps_clip_image-11085" border="0" alt="wps_clip_image-11085" src="http://images.cnblogs.com/cnblogs_com/nnhy/201202/201202270029027739.png" width="400" height="123"&gt;&lt;/a&gt;&lt;span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="p0"&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/nnhy/201202/20120227002902771.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="wps_clip_image-25891" border="0" alt="wps_clip_image-25891" src="http://images.cnblogs.com/cnblogs_com/nnhy/201202/201202270029029658.png" width="647" height="111"&gt;&lt;/a&gt;&lt;span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="p0"&gt;&lt;span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"&gt;删除&lt;font face="Times New Roman"&gt;ID=31&lt;/font&gt;&lt;font face="宋体"&gt;这一行&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="p0"&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/nnhy/201202/201202270029022690.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="wps_clip_image-19090" border="0" alt="wps_clip_image-19090" src="http://images.cnblogs.com/cnblogs_com/nnhy/201202/201202270029032133.png" width="420" height="147"&gt;&lt;/a&gt;&lt;span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="p0"&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/nnhy/201202/201202270029039625.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="wps_clip_image-19296" border="0" alt="wps_clip_image-19296" src="http://images.cnblogs.com/cnblogs_com/nnhy/201202/201202270029037117.png" width="620" height="92"&gt;&lt;/a&gt;&lt;span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="p0"&gt;&lt;span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"&gt;点击列头的&lt;font face="Times New Roman"&gt;UserName&lt;/font&gt;&lt;font face="宋体"&gt;，让数据按钮&lt;/font&gt;&lt;font face="Times New Roman"&gt;UserName&lt;/font&gt;&lt;font face="宋体"&gt;排序，跳到第三页&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="p0"&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/nnhy/201202/201202270029038197.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="wps_clip_image-14294" border="0" alt="wps_clip_image-14294" src="http://images.cnblogs.com/cnblogs_com/nnhy/201202/201202270029034052.png" width="298" height="337"&gt;&lt;/a&gt;&lt;span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="p0"&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/nnhy/201202/201202270029038479.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="wps_clip_image-24387" border="0" alt="wps_clip_image-24387" src="http://images.cnblogs.com/cnblogs_com/nnhy/201202/201202270029033147.png" width="646" height="58"&gt;&lt;/a&gt;&lt;span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="p0"&gt;&lt;span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"&gt;再点击一次，让其反向排序，然后跳到第三页&lt;/span&gt;&lt;span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="p0"&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/nnhy/201202/201202270029039003.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="wps_clip_image-13881" border="0" alt="wps_clip_image-13881" src="http://images.cnblogs.com/cnblogs_com/nnhy/201202/201202270029045622.png" width="415" height="343"&gt;&lt;/a&gt;&lt;span style="font-family: 'Times New Roman'; font-size: 10.5pt; mso-spacerun: 'yes'"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="p0"&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/nnhy/201202/201202270029048970.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="wps_clip_image-20114" border="0" alt="wps_clip_image-20114" src="http://images.cnblogs.com/cnblogs_com/nnhy/201202/201202270029048413.png" width="647" height="53"&gt;&lt;/a&gt;&lt;span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="p0"&gt;&lt;span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"&gt;我们来做个查询，增加一个文本框和查询按钮，查询按钮不需要写代码，仅仅是为了让页面回发。&lt;/span&gt;&lt;span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="p0"&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/nnhy/201202/201202270029045905.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="wps_clip_image-24329" border="0" alt="wps_clip_image-24329" src="http://images.cnblogs.com/cnblogs_com/nnhy/201202/201202270029048937.png" width="496" height="235"&gt;&lt;/a&gt;&lt;span style="font-family: 'Times New Roman'; font-size: 10.5pt; mso-spacerun: 'yes'"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="p0"&gt;&lt;span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'"&gt;然后改一下&lt;/span&gt;&lt;span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'"&gt;ObjectDataSource&lt;font face="宋体"&gt;的参数，可以通过打开智能标记，一路到最后一步，也可以从属性窗口的&lt;/font&gt;&lt;font face="Times New Roman"&gt;SelectParameters&lt;/font&gt;&lt;font face="宋体"&gt;打开，设置&lt;/font&gt;&lt;font face="Times New Roman"&gt;key&lt;/font&gt;&lt;font face="宋体"&gt;参数绑定控件&lt;/font&gt;&lt;font face="Times New Roman"&gt;txtKey&lt;/font&gt;&lt;font face="宋体"&gt;，也就是上面的文本框。&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="p0"&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/nnhy/201202/201202270029046428.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="wps_clip_image-19858" border="0" alt="wps_clip_image-19858" src="http://images.cnblogs.com/cnblogs_com/nnhy/201202/201202270029043048.png" width="588" height="190"&gt;&lt;/a&gt;&lt;span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="p0"&gt;&lt;span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'"&gt;“确定”后保存页面，有时候设计器的修改无法更新到页面源码上面，可以通过把设计器切换为源码试试，也可以点击源码右边的滚动条。&lt;/span&gt;&lt;span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="p0"&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/nnhy/201202/201202270029059427.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="wps_clip_image-23771" border="0" alt="wps_clip_image-23771" src="http://images.cnblogs.com/cnblogs_com/nnhy/201202/201202270029053298.png" width="647" height="456"&gt;&lt;/a&gt;&lt;span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="p0"&gt;&lt;span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"&gt;图中可以看出源码的改变。上图中可以看出&lt;/span&gt;&lt;span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"&gt;Search&lt;font face="宋体"&gt;方法和&lt;/font&gt;&lt;font face="Times New Roman"&gt;SearchCount&lt;/font&gt;&lt;font face="宋体"&gt;有四个参数，除了&lt;/font&gt;&lt;font face="Times New Roman"&gt;key&lt;/font&gt;&lt;font face="宋体"&gt;外，另外三个前面都有提到。这个方法实际上就是对这个实体类的所有字符串字段进行模糊查询。&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="p0"&gt;&lt;span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"&gt;预览看一下效果，输入关键字“修改”进行查询，看看能不能找到我们刚才修改的那一行。&lt;/span&gt;&lt;span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="p0"&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/nnhy/201202/201202270029054377.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="wps_clip_image-11845" border="0" alt="wps_clip_image-11845" src="http://images.cnblogs.com/cnblogs_com/nnhy/201202/201202270029053821.png" width="503" height="118"&gt;&lt;/a&gt;&lt;span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="p0"&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/nnhy/201202/20120227002905441.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="wps_clip_image-19558" border="0" alt="wps_clip_image-19558" src="http://images.cnblogs.com/cnblogs_com/nnhy/201202/201202270029059884.png" width="646" height="106"&gt;&lt;/a&gt;&lt;span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="p0"&gt;&lt;span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"&gt;试试查询“&lt;/span&gt;&lt;span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"&gt;admin3&lt;font face="宋体"&gt;”&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="p0"&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/nnhy/201202/201202270029057376.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="wps_clip_image-19035" border="0" alt="wps_clip_image-19035" src="http://images.cnblogs.com/cnblogs_com/nnhy/201202/201202270029066820.png" width="496" height="314"&gt;&lt;/a&gt;&lt;span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="p0"&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/nnhy/201202/201202270029064835.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="wps_clip_image-22816" border="0" alt="wps_clip_image-22816" src="http://images.cnblogs.com/cnblogs_com/nnhy/201202/201202270029068182.png" width="647" height="75"&gt;&lt;/a&gt;&lt;span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="p0"&gt;&lt;span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"&gt;日志里面的&lt;/span&gt;&lt;span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"&gt;SQL&lt;font face="宋体"&gt;与时俱进！&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="p0"&gt;&lt;span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"&gt;上面展示了分页、排序、编辑、删除、查询，实际上还可以查询加分页加排序，混合进行。&lt;/span&gt;&lt;span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="p0"&gt;&lt;span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"&gt;ObjectDataSource&lt;font face="宋体"&gt;高级查询可以参考&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;a href="http://www.cnblogs.com/nnhy/archive/2011/08/16/2140479.html"&gt;&lt;span style="font-family: '宋体'; color: rgb(0,0,255); font-size: 12pt; font-weight: bold; text-decoration: underline; mso-spacerun: 'yes'"&gt;《在&lt;/span&gt;&lt;span style="font-family: 'Times New Roman'; color: rgb(0,0,255); font-size: 12pt; font-weight: bold; text-decoration: underline; mso-spacerun: 'yes'"&gt;XCode&lt;font face="宋体"&gt;中如何使用高级查询&lt;/font&gt;&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;span style="font-family: '宋体'; color: rgb(0,0,255); font-size: 12pt; font-weight: bold; text-decoration: underline; mso-spacerun: 'yes'"&gt;》&lt;/span&gt;&lt;span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="p0"&gt;&lt;span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"&gt;ObjectDataSource&lt;font face="宋体"&gt;的更多精彩&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;a href="http://www.cnblogs.com/nnhy/archive/2010/09/13/1824669.html"&gt;&lt;span style="font-family: '宋体'; color: rgb(0,0,255); font-size: 12pt; font-weight: bold; text-decoration: underline; mso-spacerun: 'yes'"&gt;《与&lt;/span&gt;&lt;span style="font-family: 'Times New Roman'; color: rgb(0,0,255); font-size: 12pt; font-weight: bold; text-decoration: underline; mso-spacerun: 'yes'"&gt;ObjectDataSource&lt;font face="宋体"&gt;共舞&lt;/font&gt;&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;span style="font-family: '宋体'; color: rgb(0,0,255); font-size: 12pt; font-weight: bold; text-decoration: underline; mso-spacerun: 'yes'"&gt;》&lt;/span&gt;&lt;span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="p0"&gt;&lt;span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"&gt;我们增加一个添加管理员用的表单页面&lt;/span&gt;&lt;span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"&gt;AdminForm.aspx&lt;/span&gt;&lt;span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="p0"&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/nnhy/201202/201202270029068705.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="wps_clip_image-7631" border="0" alt="wps_clip_image-7631" src="http://images.cnblogs.com/cnblogs_com/nnhy/201202/201202270029093915.png" width="647" height="207"&gt;&lt;/a&gt;&lt;span style="font-family: 'Times New Roman'; font-size: 10.5pt; mso-spacerun: 'yes'"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="p0"&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/nnhy/201202/201202270029091407.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="wps_clip_image-7161" border="0" alt="wps_clip_image-7161" src="http://images.cnblogs.com/cnblogs_com/nnhy/201202/201202270029108899.png" width="492" height="284"&gt;&lt;/a&gt;&lt;span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="p0"&gt;&lt;span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"&gt;试试添加一个管理员&lt;/span&gt;&lt;span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"&gt;test/test&lt;/span&gt;&lt;span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="p0"&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/nnhy/201202/201202270029104439.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="wps_clip_image-8009" border="0" alt="wps_clip_image-8009" src="http://images.cnblogs.com/cnblogs_com/nnhy/201202/201202270029108342.png" width="262" height="102"&gt;&lt;/a&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/nnhy/201202/201202270029107470.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="wps_clip_image-13472" border="0" alt="wps_clip_image-13472" src="http://images.cnblogs.com/cnblogs_com/nnhy/201202/201202270029107786.png" width="350" height="130"&gt;&lt;/a&gt;&lt;span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="p0"&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/nnhy/201202/201202270029102454.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="wps_clip_image-3260" border="0" alt="wps_clip_image-3260" src="http://images.cnblogs.com/cnblogs_com/nnhy/201202/201202270029101897.png" width="646" height="108"&gt;&lt;/a&gt;&lt;span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="p0"&gt;&lt;span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"&gt;添加成功！&lt;/span&gt;&lt;span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="p0"&gt;&lt;span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;h1 style="margin-top: 0pt; margin-bottom: 0pt"&gt;&lt;span style="font-family: '宋体'; font-size: 22pt; font-weight: bold; mso-spacerun: 'yes'"&gt;六、&lt;/span&gt;&lt;span style="font-family: '宋体'; font-size: 22pt; font-weight: bold; mso-spacerun: 'yes'"&gt;总结&lt;/span&gt;&lt;span style="font-family: '宋体'; font-size: 22pt; font-weight: bold; mso-spacerun: 'yes'"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt; &lt;p class="p0"&gt;&lt;span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"&gt;到此为止，我们完成了一个最简单的后台管理模块，栏目和文章的管理，也可采用类似的做法来实现。&lt;/span&gt;&lt;span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="p0"&gt;&lt;span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"&gt;看到这里，如果没看明白，建议结合例子代码回头再看几次。&lt;/span&gt;&lt;span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="p0"&gt;&lt;span style="font-family: '宋体'; color: rgb(255,0,0); font-size: 12pt; font-weight: bold; mso-spacerun: 'yes'"&gt;如果你要鄙视这种做法，那么恭喜你，终于迈开了通向&lt;font face="Times New Roman"&gt;XCode&lt;/font&gt;&lt;font face="宋体"&gt;的第一步！&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: '宋体'; color: rgb(255,0,0); font-size: 12pt; font-weight: bold; mso-spacerun: 'yes'"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="p0"&gt;&lt;span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"&gt;我们开头就说过，真正用&lt;font face="Times New Roman"&gt;XCode&lt;/font&gt;&lt;font face="宋体"&gt;开发项目，肯定不会是这么做的，因为这种做法，实在是——&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: '宋体'; font-size: 12pt; font-weight: bold; mso-spacerun: 'yes'"&gt;效率太低、可维护性太差！&lt;/span&gt;&lt;span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="p0"&gt;&lt;span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"&gt;如果你开始对&lt;font face="Times New Roman"&gt;XCode&lt;/font&gt;&lt;font face="宋体"&gt;感兴趣，可以先看看这几篇文章：&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="p0"&gt;&lt;span&gt;&lt;a href="http://www.cnblogs.com/nnhy/archive/2012/02/27/2369252.html"&gt;&lt;span style="font-family: 'Times New Roman'; color: rgb(0,0,255); font-size: 15.5pt; font-weight: bold; text-decoration: underline; mso-spacerun: 'yes'"&gt;数据映射组件&lt;font face="Times New Roman"&gt;NewLife.XCode&lt;/font&gt;&lt;font face="宋体"&gt;优势&lt;/font&gt;&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;span style="font-family: 'Times New Roman'; font-size: 15.5pt; font-weight: bold; mso-spacerun: 'yes'"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="p0"&gt;&lt;span&gt;&lt;a href="http://www.cnblogs.com/nnhy/archive/2010/09/15/1827477.html"&gt;&lt;span style="font-family: 'Times New Roman'; color: rgb(0,0,255); font-size: 15.5pt; font-weight: bold; text-decoration: underline; mso-spacerun: 'yes'"&gt;ORM&lt;font face="宋体"&gt;组件&lt;/font&gt;&lt;font face="Times New Roman"&gt;XCode&lt;/font&gt;&lt;font face="宋体"&gt;（撬动千万级数据）&lt;/font&gt;&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;span style="font-family: 'Times New Roman'; font-size: 15.5pt; font-weight: bold; mso-spacerun: 'yes'"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="p0"&gt;&lt;span&gt;&lt;a href="http://www.cnblogs.com/nnhy/archive/2010/09/25/1834320.html"&gt;&lt;span style="font-family: 'Times New Roman'; color: rgb(0,0,255); font-size: 15.5pt; font-weight: bold; text-decoration: underline; mso-spacerun: 'yes'"&gt;充血模型的&lt;font face="Times New Roman"&gt;ORM&lt;/font&gt;&lt;font face="宋体"&gt;能做什么？&lt;/font&gt;&lt;font face="Times New Roman"&gt;——ORM&lt;/font&gt;&lt;font face="宋体"&gt;组件&lt;/font&gt;&lt;font face="Times New Roman"&gt;XCode&lt;/font&gt;&lt;font face="宋体"&gt;（十八般武艺）&lt;/font&gt;&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="p0"&gt;&lt;span style="font-family: '宋体'; font-size: 12pt; font-weight: bold; mso-spacerun: 'yes'"&gt;更多精彩敬请等待！&lt;/span&gt;&lt;/p&gt; &lt;p class="p0"&gt;&lt;span style="font-family: '宋体'; font-size: 12pt; font-weight: bold; mso-spacerun: 'yes'"&gt;&lt;/span&gt;&lt;span style="font-family: '宋体'; font-size: 12pt; font-weight: bold; mso-spacerun: 'yes'"&gt;&lt;/span&gt;&lt;span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"&gt;&lt;/span&gt;&amp;nbsp;&lt;/p&gt; &lt;p class="p0"&gt;&lt;span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"&gt;&lt;a href="http://files.cnblogs.com/nnhy/XCode%E5%85%A5%E9%97%A8%E4%BE%8B%E5%AD%90CMS_20120227002920.rar" target="_blank"&gt;&lt;strong&gt;&lt;font color="#ff0000" size="6"&gt;XCode入门例子项目下载&lt;/font&gt;&lt;/strong&gt;&lt;/a&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="p0"&gt;&lt;span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"&gt;&lt;/span&gt;&amp;nbsp;&lt;/p&gt; &lt;p class="p0"&gt;&lt;span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"&gt;&lt;a href="http://files.cnblogs.com/nnhy/%E4%BB%A3%E7%A0%81%E7%94%9F%E6%88%90%E5%99%A8XCoder_20120227002915.rar" target="_blank"&gt;&lt;strong&gt;&lt;font color="#ff0000" size="6"&gt;代码生成器XCoder下载&lt;/font&gt;&lt;/strong&gt;&lt;/a&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="p0"&gt;&lt;span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"&gt;&lt;/span&gt;&amp;nbsp;&lt;/p&gt; &lt;p class="p0"&gt;&lt;span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"&gt;大石头&lt;/span&gt;&lt;span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="p0"&gt;&lt;span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"&gt;新生命开发团队&lt;/span&gt;&lt;span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="p0"&gt;&lt;span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"&gt;2012-02-27 00:17&lt;/span&gt;&lt;span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;&lt;img src="http://www.cnblogs.com/nnhy/aggbug/2369263.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/nnhy/archive/2012/02/27/2369263.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/nnhy/archive/2012/02/27/2369252.html</id><title type="text">数据映射组件NewLife.XCode优势</title><summary type="text">数据映射组件XCode优势 XCode是一个超越了ORM范围的映射组件，除了对象到关系数据库的映射外，还有到网络和其它二进制形式等的映射，所以称之为数据映射组件。 相对于国内外其它ORM，XCod...</summary><published>2012-02-26T16:14:00Z</published><updated>2012-02-26T16:14:00Z</updated><author><name>大石头</name><uri>http://www.cnblogs.com/nnhy/</uri></author><link rel="alternate" href="http://www.cnblogs.com/nnhy/archive/2012/02/27/2369252.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/nnhy/archive/2012/02/27/2369252.html"/><content type="html">&lt;div style="layout-grid:  15.6pt none" class="Section0"&gt; &lt;p class="p0"&gt;&lt;span style="font-family: '宋体'; font-size: 22pt; font-weight: bold; mso-spacerun: 'yes'"&gt;数据映射组件&lt;font face="Times New Roman"&gt;XCode&lt;/font&gt;&lt;font face="宋体"&gt;优势&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'"&gt;&lt;?xml:namespace prefix = o /&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="p0"&gt;&lt;span style="font-family: 'Times New Roman'; font-size: 10.5pt; mso-spacerun: 'yes'"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="p0"&gt;&lt;span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"&gt;XCode&lt;font face="宋体"&gt;是一个超越了&lt;/font&gt;&lt;font face="Times New Roman"&gt;ORM&lt;/font&gt;&lt;font face="宋体"&gt;范围的映射组件，除了对象到关系数据库的映射外，还有到网络和其它二进制形式等的映射，所以称之为数据映射组件。&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="p0"&gt;&lt;span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"&gt;相对于国内外其它&lt;font face="Times New Roman"&gt;ORM&lt;/font&gt;&lt;font face="宋体"&gt;，&lt;/font&gt;&lt;font face="Times New Roman"&gt;XCode&lt;/font&gt;&lt;font face="宋体"&gt;具有以下优势：&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="p0"&gt;&lt;span style="font-family: '宋体'; color: rgb(0,0,255); font-size: 12pt; font-weight: bold; mso-spacerun: 'yes'"&gt;1&lt;font face="宋体"&gt;，采用最好的分页算法，高效处理海量数据。&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"&gt;数据分页的思想贯穿整个&lt;font face="Times New Roman"&gt;XCode&lt;/font&gt;&lt;font face="宋体"&gt;的生命周期，任何一个不论大小的测试，数据样本都是单表一千万起。其它很多&lt;/font&gt;&lt;font face="Times New Roman"&gt;ORM&lt;/font&gt;&lt;font face="宋体"&gt;，在数据达到百万之后会变慢，达到千万后基本上就卡死了。&lt;/font&gt;&lt;font face="Times New Roman"&gt;XCode&lt;/font&gt;&lt;font face="宋体"&gt;同时支持最流行的几大数据库分页算法，经过&lt;/font&gt;&lt;font face="Times New Roman"&gt;10&lt;/font&gt;&lt;font face="宋体"&gt;多年的经验积累，根据数据库类型、版本以及所处环境，自动选择最佳的分页算法。当前很多其它&lt;/font&gt;&lt;font face="Times New Roman"&gt;ORM&lt;/font&gt;&lt;font face="宋体"&gt;要么仅支持一两种数据库的分页算法，要么采用的分页算法具有极大的局限性，要求所设计的数据表必须具有某种特征。&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="p0"&gt;&lt;span style="font-family: '宋体'; color: rgb(0,0,255); font-size: 12pt; font-weight: bold; mso-spacerun: 'yes'"&gt;2&lt;font face="宋体"&gt;，先进的多级缓存思想，保证最出色的性能。&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"&gt;XCode&lt;font face="宋体"&gt;在最重要的数据管道主线上拥有三级缓存设计，在其它地方拥有无数的缓存设计。缓存的设计，让使用&lt;/font&gt;&lt;font face="Times New Roman"&gt;XCode&lt;/font&gt;&lt;font face="宋体"&gt;开发的系统在性能上能够轻易超越采用原生数据库操作开发的系统，甚至有成千上万倍的差距！几乎所有的&lt;/font&gt;&lt;font face="Times New Roman"&gt;ORM&lt;/font&gt;&lt;font face="宋体"&gt;都基于原生数据库操作，理论上会比原生数据库操作要慢一点，只有极少数使用了缓存的&lt;/font&gt;&lt;font face="Times New Roman"&gt;ORM&lt;/font&gt;&lt;font face="宋体"&gt;会比原生数据库操作要快一些，但远没有&lt;/font&gt;&lt;font face="Times New Roman"&gt;XCode&lt;/font&gt;&lt;font face="宋体"&gt;这么多的缓存设计。&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="p0"&gt;&lt;span style="font-family: '宋体'; color: rgb(0,0,255); font-size: 12pt; font-weight: bold; mso-spacerun: 'yes'"&gt;3&lt;font face="宋体"&gt;，化繁为简，容易上手。&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"&gt;最流行的&lt;font face="Times New Roman"&gt;Hibernate&lt;/font&gt;&lt;font face="宋体"&gt;、&lt;/font&gt;&lt;font face="Times New Roman"&gt;EF&lt;/font&gt;&lt;font face="宋体"&gt;等&lt;/font&gt;&lt;font face="Times New Roman"&gt;ORM&lt;/font&gt;&lt;font face="宋体"&gt;框架，追求完美的支持所有功能，庞大无比，让很多使用者望而却步。而&lt;/font&gt;&lt;font face="Times New Roman"&gt;XCode&lt;/font&gt;&lt;font face="宋体"&gt;的核心思想是让一切变得简单，变得更简单！甚至连多表关联查询都不支持，而建议分为多次单表查询。也正因为化繁为简，使得&lt;/font&gt;&lt;font face="Times New Roman"&gt;XCode&lt;/font&gt;&lt;font face="宋体"&gt;能够采用更多的缓存，化繁为简与缓存思想互相促进，甚至可以让多次单表查询远快于单次多表关联查询。&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="p0"&gt;&lt;span style="font-family: '宋体'; color: rgb(0,0,255); font-size: 12pt; font-weight: bold; mso-spacerun: 'yes'"&gt;4&lt;font face="宋体"&gt;，抽象实体结构，支持多数据库的正向反向工程。&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"&gt;绝大多数&lt;font face="Times New Roman"&gt;ORM&lt;/font&gt;&lt;font face="宋体"&gt;只负责对象与关系数据库的数据映射，而少有数据结构的映射。正向功能能够取得数据库结构，便于代码生成器使用；反向工程能够根据实体结构创建数据表、修改数据表结构、删除数据表或字段等，所以采用&lt;/font&gt;&lt;font face="Times New Roman"&gt;XCode&lt;/font&gt;&lt;font face="宋体"&gt;开发的系统，发布的时候都可以不需要附带初始数据库。正向工程反向工程均是&lt;/font&gt;&lt;font face="Times New Roman"&gt;XCode&lt;/font&gt;&lt;font face="宋体"&gt;提出的概念，在&lt;/font&gt;&lt;font face="Times New Roman"&gt;08&lt;/font&gt;&lt;font face="宋体"&gt;年之前，除了&lt;/font&gt;&lt;font face="Times New Roman"&gt;XCode&lt;/font&gt;&lt;font face="宋体"&gt;外没有任何其它&lt;/font&gt;&lt;font face="Times New Roman"&gt;ORM&lt;/font&gt;&lt;font face="宋体"&gt;支持反向工程。也正是因为实体结构映射这一设计，使得&lt;/font&gt;&lt;font face="Times New Roman"&gt;XCode&lt;/font&gt;&lt;font face="宋体"&gt;超越&lt;/font&gt;&lt;font face="Times New Roman"&gt;ORM&lt;/font&gt;&lt;font face="宋体"&gt;，发展成为可以把实体对象映射到其它非数据库的形式。&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="p0"&gt;&lt;span style="font-family: '宋体'; color: rgb(0,0,255); font-size: 12pt; font-weight: bold; mso-spacerun: 'yes'"&gt;5&lt;font face="宋体"&gt;，分布式支持。&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"&gt;尽管&lt;font face="Times New Roman"&gt;XCode&lt;/font&gt;&lt;font face="宋体"&gt;采用了最好的分页算法，但对于大型系统甚至超级系统来说，单表数千万乃至数亿的数据是远远不能满足要求的。不管从数据存储还是从性能瓶颈的角度来考虑，分布式是必然趋势！&lt;/font&gt;&lt;font face="Times New Roman"&gt;XCode&lt;/font&gt;&lt;font face="宋体"&gt;原生支持分布式设计。单表拆成多表，拆分到不同数据库、不同数据库服务器，&lt;/font&gt;&lt;font face="Times New Roman"&gt;XCode&lt;/font&gt;&lt;font face="宋体"&gt;能够完全屏蔽数据层，使用起来就跟一张超级大表一样。其它绝大多数&lt;/font&gt;&lt;font face="Times New Roman"&gt;ORM&lt;/font&gt;&lt;font face="宋体"&gt;不会对分布式实行原生支持，需要分布式数据库或者极其昂贵的硬件来配合才能做到。&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="p0"&gt;&lt;span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="p0"&gt;&lt;span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"&gt;总的来说，最好的分页算法保证基本操作不犯错，化繁为简和多级缓存的设计保证&lt;font face="Times New Roman"&gt;XCode&lt;/font&gt;&lt;font face="宋体"&gt;在性能上永无止境，所以，&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: '宋体'; color: rgb(255,0,0); font-size: 12pt; font-weight: bold; mso-spacerun: 'yes'"&gt;XCode&lt;font face="宋体"&gt;的最大优势就是性能！&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="p0"&gt;&lt;span style="font-family: 'Times New Roman'; font-size: 12pt; mso-spacerun: 'yes'"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;&lt;img src="http://www.cnblogs.com/nnhy/aggbug/2369252.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/nnhy/archive/2012/02/27/2369252.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/nnhy/archive/2011/11/12/2246805.html</id><title type="text">坚持之随想</title><summary type="text">昨晚做了一个梦，很长！梦到回到大学时代，我跟很多一样年纪的人，“潜入”（抱歉，实在没有更好的词）清华大学计算机系。并且我们这些冒牌跟正规清华学生一起上课。后来因为“潜入”的人实在太多，是正规生的两三...</summary><published>2011-11-12T14:29:00Z</published><updated>2011-11-12T14:29:00Z</updated><author><name>大石头</name><uri>http://www.cnblogs.com/nnhy/</uri></author><link rel="alternate" href="http://www.cnblogs.com/nnhy/archive/2011/11/12/2246805.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/nnhy/archive/2011/11/12/2246805.html"/><content type="html">&lt;p&gt;&lt;font size="4"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 昨晚做了一个梦，很长！梦到回到大学时代，我跟很多一样年纪的人，“潜入”（抱歉，实在没有更好的词）清华大学计算机系。并且我们这些冒牌跟正规清华学生一起上课。后来因为“潜入”的人实在太多，是正规生的两三倍之多，我们被校长（Or系主任）领到一个广场，包括正规生，还做了一个不短的演讲。他肯定了我们这些外来者的梦想，讲述了正规生是如何坚持不懈的努力然后进入清华。当我们所有人都在想将会受到什么样的处罚的时候，他最后说了一句：坚持你们的梦想！然后离开，我们所有人都懵了，不知道什么意思，是让我们留还是让我们走？随后，大家都笑了！（结局不再重要，不是吗？）&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font size="4"&gt;&lt;/font&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;font size="4"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 刚看《非诚勿扰》，其中一个男嘉宾，来自深圳，自己业余时间都花在小时候梦想上——造飞机。我心里发笑，好俗的梦想，想着很多人都不会真去做。画面切到一个车间，他在操作机床切割飞机支架。此时，正喝着熬了一个晚上的骨头汤，差点就喷出来！了不起！真了不起！他居然能独立设计并制造出来，还能稳稳的飞起来，这期间肯定吃了不少苦头！&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font size="4"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 我们每一个人，小时候都一定有一个非常了不起的梦想，老师，医生，科学家……但又有多少人能实现自己的梦想？或者说从事梦想相关的工作？甚至梦想不变的呢？恐怕不到万分之一吧！&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font size="4"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 我小学的梦想是当科学家，到了中学，就细化到物理学和生物学，上了大学，确定到了计算机，算是物理数学混合体吧。其实我也一直没有放弃自己的梦想。算是阴差阳错吧，初一时虽然受到班主任的坚决反对，但命运让我以候补的角色进入到计算机兴趣班。高一接触网络，同时开始学编程，更重要的是认识了几个有浓厚计算机的朋友，包括我们年轻的电脑课老师。因此，本来我高考志愿只有核能工程一项，后来加填了计算机科学，并且先被这个专业录取了。&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font size="4"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 我还是很爱核能工程，爱核聚变，最爱可控冷聚变。随着年纪渐长，感觉离自己的梦想越来越远，难道真的是放弃了吗？说不清楚，其实也没必要清楚。也许将来等我积累了足够的实力，我还是回来的！&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font size="4"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 说现在，其实从知道被录取到计算机科学专业后，就一直在这一行混，就快十年了！我甚至从未想过换行业，不知道这算不算是坚持呢？现在就想让更多的人能用上便宜好用的软件，也让我们做开发的兄弟姐妹能活得更精彩！&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font size="4"&gt;&lt;/font&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;font size="4"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="#ff00ff"&gt;又想起，这些年来，所见到的许许多多开发者的牢骚——累，心累！&lt;/font&gt;大骂MS技术变更太快；唠叨总是学不会多线程编程；鄙视ASP.Net WebForm杂乱；愤恨Silverlight可能的消失……&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font size="4"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; MS技术要不是不断更新，也许早就没落了，推陈出新，这是永恒不变的道理。逆水行舟，不进则退！身为开发者，如果不能与时俱进坚持学习，不断提升自己，就等着被历史所淹没吧；&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font size="4"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 多线程编程，看书看明白了又能如何？许多人本身就是冲着它的好处而来的，而从来就没有考虑过它带来的线程安全、资源争夺、WinForm界面线程等许多问题。并且，这些问题是光看书或者光看代码就能学会的吗？&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font size="4"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; WebForm是足够复杂、庞大、杂乱的，但是话说回来，恐怕80%以上的人都是都是以此为入口，进入ASP.Net的吧？即使是现在用MVC的朋友，也不见得就很厉害。只要是没经过认真学习，不懂Http原理的，基本上也不会懂ASP.Net原理；但只要懂ASP.Net原理的，也不至于鄙视WebForm。&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font size="4"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 不坚持下去，拥有更多的经历，有什么资格发牢骚呢？一些学了三五天就希望小有所成的朋友，我建议你能静下心来坚持下去，如果做不到，趁早改行吧！&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font size="4"&gt;&lt;/font&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;font size="4"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="#0000ff"&gt;从99年学QB和ASP算起，我有12年的编程生涯，现在也敢厚着脸皮说我是一名普通程序员。面对学了两三年就自诩架构师的人，我感到汗颜！如若10年后你还在这一行，那么我打心底里佩服你，为了你的坚持！&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font size="4"&gt;&lt;/font&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;font size="4"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;font color="#ff0000" size="5"&gt;&lt;strong&gt;正因为，坚持很难做到，所以坚持所能得到的特别可贵！&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/nnhy/aggbug/2246805.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/nnhy/archive/2011/11/12/2246805.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/nnhy/archive/2011/10/30/2229444.html</id><title type="text">Oracle免客户端For .Net（增加分析Devart和DataDirect）</title><summary type="text">我只是一名普通的.Net开发人员，常用SqlServer，偶尔用其它数据库，属于能连上然后select/execute就行的那种。但就是我这么小的愿望，在面对Oracle时都很难实现。 虽然04年...</summary><published>2011-10-30T11:17:00Z</published><updated>2011-10-30T11:17:00Z</updated><author><name>大石头</name><uri>http://www.cnblogs.com/nnhy/</uri></author><link rel="alternate" href="http://www.cnblogs.com/nnhy/archive/2011/10/30/2229444.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/nnhy/archive/2011/10/30/2229444.html"/><content type="html">&lt;p&gt;&lt;font size="4"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 我只是一名普通的.Net开发人员，常用SqlServer，偶尔用其它数据库，属于能连上然后select/execute就行的那种。但就是我这么小的愿望，在面对Oracle时都很难实现。&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font size="4"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 虽然04年就开始用Oracle开发项目，但每次遇到问题总是胡乱弄一下，能用就行。这次又遇到问题，更离谱的是：同一个版本的NewLife.XCode，同一台机器，同一个ODP.Net版本，上个月写的程序工作好好的，怎么折腾都能用，刚刚新写的一个，怎么写都不行！于是，决心彻底的解决这个问题，共耗时三天三夜（熬夜到凌晨一两点）。&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font size="4"&gt;&lt;/font&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;font size="4"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 我们知道，用.Net链接Oracle数据库，有两个驱动，一个是.Net自带的，一个是Oracle开发的ODP.Net（&lt;a href="http://www.oracle.com/technetwork/cn/database/windows/downloads/index-101312-zhs.html" target="_blank"&gt;&lt;font color="#ff0000" size="5"&gt;&lt;strong&gt;下载地址&lt;/strong&gt;&lt;/font&gt;&lt;/a&gt;）（要注册，后面提供一个我们团队的下载地址）。而.Net自带那个，MS早就不支持不更新了，于是一般开发都会用ODP.Net。并且，.Net自带的驱动，必须用TNS方式连接数据库，而不能用这种：&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font size="4"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="#0000ff"&gt;Data Source=(DESCRIPTION =(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.34)(PORT = 1521))(CONNECT_DATA =(SERVER = DEDICATED)(SERVICE_NAME = ORC)));User ID=admin;Password=admin;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font size="4"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 否则报错：&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font size="4"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="#ff00ff"&gt;&lt;strong&gt;连接选项“Data Source”的长度无效，最大长度为 128&lt;/strong&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font size="4"&gt;&lt;/font&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;font size="4"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 开发支持Oracle的.Net程序，标准流程是先安装Oracle客户端，然后使用.Net自带驱动或者ODP.Net。其实只要按照这个流程来做，基本上不会有错误，要错也只是TNS错而已。而最令人忍受不了的就是，Oracle客户端实在是无比庞大，尽管后来可以只安装Oracle客户端运行时，仍然很大。于是，就有高手制作精简版客户端，这个网上很多，效果也非常不错。&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font size="4"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 当然啦，Oracle官方也没闲着，推出了InstantClient，不到30M的msi安装程序。总算是摆脱了那个巨大的客户端。&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font size="4"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 但是，人的欲求是无止境的！有了更小的运行时，为了方便，我们还希望能做到免安装，伴随着我们开发的主程序拷贝过去就能用。经过多方求证，Oracle客户端运行时的关键在于OCI，也就是说，不管用什么语言写的程序，只要能找到运行时的oci.dll，基本上就能链接Oracle数据库了。&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font size="4"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 通过反编译ODP.Net里面的Oracle.DataAccess.dll发现，它会先找注册表，然后是配置文件，从中找一些设置，第一个就是DllPath，我估计这个就是OCI的路径。于是备份了InstantClient安装后的文件，然后把它卸载了，并确保注册表没有残留。释放备份的文件，在项目配置文件里面指定路径：&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/nnhy/201110/201110301915265837.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://images.cnblogs.com/cnblogs_com/nnhy/201110/20111030191531882.png" width="807" height="213"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;&lt;font size="4"&gt;实际上是增加一个段：&lt;/font&gt;&lt;/p&gt;  &lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;configSections&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;br/&gt;    &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;section &lt;/span&gt;&lt;span style="color: red"&gt;name&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;"&lt;span style="color: blue"&gt;oracle.dataaccess.client&lt;/span&gt;" &lt;span style="color: red"&gt;type&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;"&lt;span style="color: blue"&gt;System.Data.Common.DbProviderConfigurationHandler, System.Data,  Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089&lt;/span&gt;" &lt;span style="color: blue"&gt;/&amp;gt;&lt;br/&gt;  &amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;configSections&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;br/&gt;&lt;/span&gt;&lt;font size="4"&gt;&lt;/font&gt;&lt;p&gt;&lt;font size="4"&gt;&lt;/font&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;font size="4"&gt;然后再设置DllPath：&lt;/font&gt;&lt;/p&gt;&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;oracle.dataaccess.client&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;br/&gt;  &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;settings&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;br/&gt;    &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;add &lt;/span&gt;&lt;span style="color: red"&gt;name&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;"&lt;span style="color: blue"&gt;DllPath&lt;/span&gt;" &lt;span style="color: red"&gt;value&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;"&lt;span style="color: blue"&gt;D:\Oracle\OCI&lt;/span&gt;" &lt;span style="color: blue"&gt;/&amp;gt;&lt;br/&gt;  &amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;settings&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;br/&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;oracle.dataaccess.client&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;br/&gt;&lt;/span&gt;&lt;p&gt;&lt;font size="4"&gt;&lt;/font&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;font size="4"&gt;让测试代码跑起来，一切正常！这说明，只要能找到oci.dll所在目录，程序就可以正常工作。当然，如果把这个目录的文件直接放到软件目录中，也是可以使用的。&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font size="4"&gt;到这里，习惯的想，只要把那些安装后的文件拷贝走，就可以使用了。但打包的时候才发现，InstantClient的安装文件虽然不到30M，但是安装之后足足139M（下图实际上是最新的驱动2.112.2.0，网上的InstantClient是2.112.1.0，两者文件基本一样）：&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/nnhy/201110/201110301915414252.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://images.cnblogs.com/cnblogs_com/nnhy/201110/201110301915504931.png" width="613" height="759"&gt;&lt;/a&gt; &lt;/p&gt;&lt;p&gt;&lt;font size="4"&gt;图中可以看到，罪魁祸首是oraociei11.dll这个，它就占了126M。上网搜索各种Oracle客户端精简方案，必要的几个文件：&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font size="4"&gt;oci.dll、orannzsbb11.dll、oraocci11.dll、oraociei11.dll，它是必不可少的呀……&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font size="4"&gt;当然，还有两个：Oracle.DataAccess.dll、OraOps11w.dll，有些安装包会把OraOps11w.dll跟OCI放在一起，也是可以的。&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/nnhy/201110/201110301916014058.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://images.cnblogs.com/cnblogs_com/nnhy/201110/2011103019161278.png" width="606" height="442"&gt;&lt;/a&gt; &lt;/p&gt;&lt;p&gt;&lt;font size="4"&gt;伤不起呀！这几个文件就127M了，最高压缩，也有30M，并且解压还特别慢！（这个压缩包后面提供下载）&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font size="4"&gt;&lt;/font&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;font size="4"&gt;难道除了这个就没办法更小了吗？不是的！朋友告诉我一个很小的运行时oracle9i310（网上有扣积分下载，后面提供本地下载），才13M，不过需要安装。&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font size="4"&gt;但是这个运行时比较难缠，如果用最新的Oracle.DataAccess.dll去连接，会报版本不匹配！&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font size="4"&gt;&lt;/font&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;font size="4"&gt;（这里插一段关于版本不兼容的说明）&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font color="#ff00ff" size="4"&gt;&lt;strong&gt;The provider is not compatible with the version of Oracle client&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font color="#ff00ff" size="4"&gt;&lt;strong&gt;提供程序与此版本的 Oracle 客户机不兼容&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font size="4"&gt;这个可是开发.Net For Oracle程序中最常见的错误了。&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font size="4"&gt;实际上，这是使用ODP.Net经常遇到的问题，在ODP.Net中，Oracle.DataAccess.dll=&amp;gt;OraOps11w.dll=&amp;gt;oci.dll，前面两者的版本必须100%匹配（OraOps11w.dll里面通过硬编码写死了的）（也许这就是Oracle官方把OraOps11w.dll跟Oracle.DataAccess.dll放在一起的原因）。后面两者的版本似乎要求不高，是C++之间的引用。&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font size="4"&gt;而.Net的Oracle驱动，版本要求就非常低了，只要能找到oci.dll，基本上就能很好工作，它不会去检查版本什么的。如果找不到oci.dll呢，就会报这个错误：&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font color="#ff00ff" size="4"&gt;&lt;strong&gt;System.Data.OracleClient 需要 Oracle 客户端软件 8.1.7 或更高版本。&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font size="4"&gt;当然，光有OCI目录（在环境变量Path中设置）不行，还得设置环境变量ORACLE_HOME为OCI目录，否则报错（因为oci.dll要用别的dll）：&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font color="#ff00ff" size="4"&gt;&lt;strong&gt;OCIEnvCreate 失败，返回代码为 -1，但错误消息文本不可用。&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font size="4"&gt;&lt;/font&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;font size="4"&gt;言归正传！&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font size="4"&gt;最新的ODP.Net驱动无法使用oracle9i310运行时，那么试试MS的。设置环境变量ORACLE_HOME为oracle9i310目录，在环境变量Path中添加其下的bin目录（oci.dll在里面）。测试正常！这表明，9i运行时支持绿色发布。&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font size="4"&gt;&lt;/font&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;font size="4"&gt;下一步，就应该是开始精简这个oracle9i310了。&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/nnhy/201110/201110301916252072.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://images.cnblogs.com/cnblogs_com/nnhy/201110/20111030191638685.png" width="592" height="446"&gt;&lt;/a&gt; &lt;/p&gt;&lt;p&gt;&lt;font size="4"&gt;不到13M的安装包，安装后只有35M，远远比最新的ODP.Net驱动要小，压缩后不到9M。&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font size="4"&gt;删除一些不必要的东西后，剩下28M，压缩得到6.5M。这应该算是最小的Oracle客户端运行时了。&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font size="4"&gt;&lt;/font&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;font size="4"&gt;&lt;strong&gt;综合比较：&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt;&lt;table border="1" cellspacing="0" cellpadding="2" width="800"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td valign="top" width="266"&gt;&amp;nbsp;&lt;/td&gt;&lt;td valign="top" width="266"&gt;&lt;p align="center"&gt;.Net自带Oracle驱动&lt;/p&gt;&lt;/td&gt;&lt;td valign="top" width="266"&gt;&lt;p align="center"&gt;ODP.Net驱动&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" width="266"&gt;连接字符串TNS写法&lt;/td&gt;&lt;td valign="top" width="266"&gt;支持&lt;/td&gt;&lt;td valign="top" width="266"&gt;支持&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" width="266"&gt;连接字符串非TNS写法&lt;/td&gt;&lt;td valign="top" width="266"&gt;不支持&lt;/td&gt;&lt;td valign="top" width="266"&gt;支持&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" width="266"&gt;是否支持Oracle9运行时&lt;/td&gt;&lt;td valign="top" width="266"&gt;支持&lt;/td&gt;&lt;td valign="top" width="266"&gt;不支持&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" width="266"&gt;是否支持Oracle11运行时&lt;/td&gt;&lt;td valign="top" width="266"&gt;支持&lt;/td&gt;&lt;td valign="top" width="266"&gt;支持&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" width="266"&gt;OCI目录设置方式&lt;/td&gt;&lt;td valign="top" width="266"&gt;环境变量Path中设置&lt;/td&gt;&lt;td valign="top" width="266"&gt;环境变量Path中设置&lt;br&gt;或&lt;br&gt;配置文件设置DllPath&lt;br&gt;或&lt;br&gt;注册表设置DllPath&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" width="266"&gt;其它环境变量&lt;/td&gt;&lt;td valign="top" width="266"&gt;需要设置ORACLE_HOME &lt;/td&gt;&lt;td valign="top" width="266"&gt;无&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" width="266"&gt;运行时安装包大小&lt;/td&gt;&lt;td valign="top" width="266"&gt;9i运行时安装包13M&lt;/td&gt;&lt;td valign="top" width="266"&gt;11g运行时安装包30M&lt;br&gt;最新ODP.Net共52M&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" width="266"&gt;绿色精简后大小&lt;/td&gt;&lt;td valign="top" width="266"&gt;9i运行时6.5M&lt;/td&gt;&lt;td valign="top" width="266"&gt;11g运行时30M&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" width="266"&gt;据说的差别&lt;/td&gt;&lt;td valign="top" width="266"&gt;性能底下，功能特性少&lt;/td&gt;&lt;td valign="top" width="266"&gt;性能最高，功能特性多&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" width="266"&gt;&amp;nbsp;&lt;/td&gt;&lt;td valign="top" width="266"&gt;&amp;nbsp;&lt;/td&gt;&lt;td valign="top" width="266"&gt;&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;font size="4"&gt;下载地址：&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font color="#ff0000" size="5"&gt;&lt;strong&gt;&lt;a href="http://nnhy.cnblogs.com" target="_blank"&gt;Oracle9i客户端运行时精简版 6.5M&lt;/a&gt;&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font color="#ff0000" size="5"&gt;&lt;strong&gt;&lt;a href="http://nnhy.cnblogs.com" target="_blank"&gt;Oracle11g客户端运行时精简版 30M&lt;/a&gt;&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font size="4"&gt;&lt;/font&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;font color="#0000ff" size="5"&gt;&lt;strong&gt;&lt;a href="http://nnhy.cnblogs.com" target="_blank"&gt;Oracle9i客户端运行时原版 13M&lt;/a&gt;&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font color="#0000ff" size="5"&gt;&lt;strong&gt;&lt;a href="http://nnhy.cnblogs.com" target="_blank"&gt;Oracle11g客户端运行时原版 52M&lt;/a&gt;&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font size="4"&gt;&lt;/font&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;font size="4"&gt;(下载地址随时可能变更,以最新群公告为准!)&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font size="4"&gt;&lt;font color="#000000"&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;FTP承受不了，增加网盘共享：&lt;/p&gt;&lt;p&gt;9i精简版：&lt;a title="http://www.kuaipan.cn/file/id_2378544298602218.html" href="http://www.kuaipan.cn/file/id_2378544298602218.html"&gt;http://www.kuaipan.cn/file/id_2378544298602218.html&lt;/a&gt;&lt;/p&gt;&lt;p&gt;11g精简版：&lt;a title="http://www.kuaipan.cn/file/id_2378544298602215.html" href="http://www.kuaipan.cn/file/id_2378544298602215.html"&gt;http://www.kuaipan.cn/file/id_2378544298602215.html&lt;/a&gt;&lt;/p&gt;&lt;p&gt;9i原版：&lt;a title="http://www.kuaipan.cn/file/id_2378544298602216.html" href="http://www.kuaipan.cn/file/id_2378544298602216.html"&gt;http://www.kuaipan.cn/file/id_2378544298602216.html&lt;/a&gt;&lt;/p&gt;&lt;p&gt;11g原版：&lt;a title="http://www.kuaipan.cn/file/id_2378544298602217.html" href="http://www.kuaipan.cn/file/id_2378544298602217.html"&gt;http://www.kuaipan.cn/file/id_2378544298602217.html&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;（FTP严重影响了服务器网络，现在已经关闭）&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;后续：&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.devart.com/" target="_blank"&gt;&lt;font color="#ff0000" size="5"&gt;&lt;strong&gt;Devart dotConnect for Oracle&lt;/strong&gt;&lt;/font&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;在&lt;a href="http://www.cnblogs.com/onecool/" target="_blank"&gt;&lt;strong&gt;&lt;font color="#0000ff"&gt;OneCool&lt;/font&gt;&lt;/strong&gt;&lt;/a&gt;和&lt;a href="http://www.cnblogs.com/xiaopang2010/" target="_blank"&gt;&lt;font color="#0000ff"&gt;&lt;strong&gt;小胖2010&lt;/strong&gt;&lt;/font&gt;&lt;/a&gt;的推荐下，分析&lt;a href="http://www.devart.com/" target="_blank"&gt;Devart&lt;/a&gt;。&lt;/p&gt;&lt;p&gt;1，采用名称混淆，分析有一定难度&lt;/p&gt;&lt;p&gt;2，采用Lic授权，很脆弱&lt;/p&gt;&lt;p&gt;3，发现调用OCI.DLL，发现处理Home等环境变量，看来还是离不开oci.dll&lt;/p&gt;&lt;p&gt;综评，跟ODP.Net比，没有优势，并且还是收费的（也有免费版）&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.datadirect.com" target="_blank"&gt;&lt;strong&gt;&lt;font color="#ff0000" size="5"&gt;DataDirect&lt;/font&gt;&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;在园友&lt;a href="http://www.cnblogs.com/wizardwu" target="_blank"&gt;&lt;font color="#0000ff"&gt;&lt;strong&gt;wizardwu&lt;/strong&gt;&lt;/font&gt;&lt;/a&gt;的&lt;a href="http://www.cnblogs.com/wizardwu/archive/2010/05/17/1737009.html" target="_blank"&gt;&lt;font color="#0000ff"&gt;&lt;strong&gt;一篇博客&lt;/strong&gt;&lt;/font&gt;&lt;/a&gt;中发现了这个家伙。&lt;/p&gt;&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/nnhy/201110/201110311738358161.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://images.cnblogs.com/cnblogs_com/nnhy/201110/20111031173840665.png" width="538" height="644"&gt;&lt;/a&gt; &lt;/p&gt;&lt;p&gt;1，产品说明非常吸引人，唯一一个100%托管代码数据提供者，不需要Oracle OCI客户端库。对，这就是我们梦寐以求的！&lt;/p&gt;&lt;p&gt;2，最新版本是3.5，需要申请试用。上午10点，发动群友，采用各种国内外邮箱、IP、VPN申请，均无法收到邮件。下午3点收到，开始下载。&lt;/p&gt;&lt;p&gt;3，上午从CSDN找到一个2.1的版本（For .Net 1.0），未混淆，采用Lic授权，支持OEM，自写的对称加密算法，内置没有任何处理的密码，很脆弱&lt;/p&gt;&lt;p&gt;4，从2.1版本中很清楚的看到数据封包解包，网络发送和接收的过程。没有见到任何跟OCI和HOME有关的东西。可以肯定，这是纯托管代码且不需要OCI的。&lt;/p&gt;&lt;p&gt;5，下午分析3.5（For .Net 2.0/4.0），名称混淆，也是Lic授权。看到类的布局，还有各个命名空间，不需要分析下去了。&lt;/p&gt;&lt;p&gt;综评，没错，&lt;font color="#ff0000" size="5"&gt;&lt;strong&gt;这就是我们所需要的极品，强烈推荐！！！&lt;/strong&gt;&lt;/font&gt;没找到价格，似乎必须跟他们联系。时间不多，没有做运行测试，我想网上有很多报告的！&lt;/p&gt;&lt;p&gt;其中2.1版，关于Oracle、SqlServer、Sybase、DB2的封包，非常具有参考价值！&lt;/p&gt;&lt;p&gt;2.1版下载：&lt;a title="http://www.kuaipan.cn/file/id_2378544298602742.html" href="http://www.kuaipan.cn/file/id_2378544298602742.html"&gt;http://www.kuaipan.cn/file/id_2378544298602742.html&lt;/a&gt;&lt;/p&gt;&lt;p&gt;3.5版下载：&lt;a title="http://www.kuaipan.cn/file/id_2378544298602758.html" href="http://www.kuaipan.cn/file/id_2378544298602758.html"&gt;http://www.kuaipan.cn/file/id_2378544298602758.html&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/nnhy/aggbug/2229444.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/nnhy/archive/2011/10/30/2229444.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/nnhy/archive/2011/09/08/2171078.html</id><title type="text">【求助】测试XCode v8.0的正向反向功能</title><summary type="text">目的：测试XCode v8.0的正常反向功能。 正向工程：从数据库读取架构信息，生成实体类。 反向工程：根据实体类的特性构造架构信息，反向生成数据库或者修改数据库。 准备工作： 1，自备数据库实例，最好是自己的数据库，为了测试各种数据库的各种字段能否被识别为正确的.Net类型（正向工程），同时也测试.Net类型能否正确转为对应的数据库类型（反向工程）。（支持MSSQL、Access、SqlCe、S...</summary><published>2011-09-08T02:52:00Z</published><updated>2011-09-08T02:52:00Z</updated><author><name>大石头</name><uri>http://www.cnblogs.com/nnhy/</uri></author><link rel="alternate" href="http://www.cnblogs.com/nnhy/archive/2011/09/08/2171078.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/nnhy/archive/2011/09/08/2171078.html"/><content type="html">&lt;p&gt;目的：测试XCode v8.0的正常反向功能。&lt;/p&gt; &lt;p&gt;正向工程：从数据库读取架构信息，生成实体类。&lt;/p&gt; &lt;p&gt;反向工程：根据实体类的特性构造架构信息，反向生成数据库或者修改数据库。&lt;/p&gt; &lt;p&gt;准备工作：&lt;/p&gt; &lt;p&gt;1，自备数据库实例，最好是自己的数据库，为了测试各种数据库的各种字段能否被识别为正确的.Net类型（正向工程），同时也测试.Net类型能否正确转为对应的数据库类型（反向工程）。（支持MSSQL、Access、SqlCe、SQLite、MySql、Oracle、PostgreSQL、Firebird）&lt;/p&gt; &lt;p&gt;2，最新的XCoder v4.2一份&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;开始：&lt;/p&gt; &lt;p&gt;1，在XCoder.exe.config中配置连接字符串，如果没有这个文件，运行一次XCoder即可自动生成。XCoder能自动发现本机MSSQL，本目录Access和SQLite。&lt;/p&gt; &lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/nnhy/201109/201109081052116871.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://images.cnblogs.com/cnblogs_com/nnhy/201109/201109081052115476.png" width="1004" height="151"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;2，启动后的主界面。连接那里下拉选择的就是前面配置的连接。检查模版那里是否有模版可选择。&lt;/p&gt; &lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/nnhy/201109/201109081052112444.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://images.cnblogs.com/cnblogs_com/nnhy/201109/201109081052113001.png" width="750" height="392"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;3，选择要测试的连接字符串，点“连接”。此时XCoder通过XCode取得数据库架构，拿到了所有表信息，并在数据表那里列出来。&lt;/p&gt; &lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/nnhy/201109/201109081052113557.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://images.cnblogs.com/cnblogs_com/nnhy/201109/201109081052128922.png" width="749" height="390"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;4，先备份一下架构信息，留后面使用。&lt;/p&gt; &lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/nnhy/201109/201109081052126447.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://images.cnblogs.com/cnblogs_com/nnhy/201109/201109081052128640.png" width="857" height="606"&gt;&lt;/a&gt; &lt;a href="http://images.cnblogs.com/cnblogs_com/nnhy/201109/201109081052121181.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://images.cnblogs.com/cnblogs_com/nnhy/201109/201109081052137626.png" width="758" height="392"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;5，选择“实体”模版，点击“生成所有表”，0.3秒即可生成12个实体类。点击“打开目录”可以直接看到。&lt;/p&gt; &lt;p&gt;&lt;/p&gt; &lt;p&gt;&lt;/p&gt; &lt;p&gt;&lt;/p&gt; &lt;p&gt;&lt;/p&gt; &lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/nnhy/201109/201109081052134071.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://images.cnblogs.com/cnblogs_com/nnhy/201109/201109081052132708.png" width="750" height="392"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/nnhy/201109/201109081052146645.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://images.cnblogs.com/cnblogs_com/nnhy/201109/201109081052143854.png" width="856" height="604"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;6，新建一个控制台项目，引用NewLife.Core.dll和XCode.dll（可以从代码生成器里面拿到）。并把刚才生成所有实体类拷贝进去。&lt;/p&gt; &lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/nnhy/201109/201109081052142774.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://images.cnblogs.com/cnblogs_com/nnhy/201109/201109081052143331.png" width="221" height="690"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;7，再添加一个应用配置App.Config。加上一些配置信息。我们生成实体类的时候，设置了连接名为Common，这个配置文件里面本应该配置一个名为Common的连接，但是我们通过XCode的连接名映射功能把Common这个连接名映射到别的连接名上去。&lt;/p&gt; &lt;p&gt;&lt;/p&gt; &lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/nnhy/201109/201109081052141728.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://images.cnblogs.com/cnblogs_com/nnhy/201109/201109081052154792.png" width="1246" height="533"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;8，写几句代码试一试。&lt;/p&gt; &lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/nnhy/201109/201109081052153397.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://images.cnblogs.com/cnblogs_com/nnhy/201109/201109081052152317.png" width="651" height="349"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;9，修改连接字符串，开始测试反向工程。&lt;/p&gt; &lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/nnhy/201109/201109081052152873.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://images.cnblogs.com/cnblogs_com/nnhy/201109/201109081052155382.png" width="1164" height="200"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;&lt;/p&gt; &lt;p&gt;10，重新启动程序。运行结果没什么变化，只是慢了一点点。其实，这是因为我们指定了一个并不存在的数据库Common888，同时配置文件里面打开了反向工程的开关XCode.Schema.Enable，XCode自动创建数据库和数据表。&lt;/p&gt; &lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/nnhy/201109/20110908105215398.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://images.cnblogs.com/cnblogs_com/nnhy/201109/201109081052159003.png" width="1183" height="883"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;11，检查一下数据库里面的字段，看看字段类型是否与本来的数据库类型一致。同时检查索引是否能够正确创建。&lt;/p&gt; &lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/nnhy/201109/201109081052157923.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://images.cnblogs.com/cnblogs_com/nnhy/201109/20110908105216431.png" width="211" height="332"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;12，测试不同数据库间的兼容性。比如从MSSQL生成实体类，然后反向工程生成到SQLite中去。这方面可以多做几个测试。测试人员之间也可以互相交换数据库架构信息（第4步导出），用XCoder导入也可以生成实体类。&lt;/p&gt; &lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/nnhy/201109/201109081052169036.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://images.cnblogs.com/cnblogs_com/nnhy/201109/201109081052168512.png" width="652" height="405"&gt;&lt;/a&gt; &lt;a href="http://images.cnblogs.com/cnblogs_com/nnhy/201109/201109081052167433.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://images.cnblogs.com/cnblogs_com/nnhy/201109/201109081052167989.png" width="503" height="303"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;XCode的类型对应基于ADO.Net，但是大量存在一种.Net类型对应多种数据库类型的情况，我们只能做很小的一部分测试，不能保证各种类型的字段都能得到正确识别。&lt;/p&gt; &lt;p&gt;各个需要附加DLL的数据库提供者，会自动下载！&lt;/p&gt; &lt;p&gt;目前XCode对各个数据库的兼容性情况排名：MSSQL2008/2005》MSSQL2000》Access》SQLite》Oracle》MySql》SqlCe》PostgreSQL》Firebird，越是后面，可能存在的问题就越多。&lt;/p&gt; &lt;p&gt;至于正向反向工程以外的问题，可以通过把项目指定到不同类型的数据库上进行测试。&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;测试过程中遇到的各种问题，在群里反馈，实时修正各种BUG。&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;测试相关资料下载地址：&lt;a href="http://xcode.codeplex.com/releases/view/73026" target="_blank"&gt;&lt;font color="#ff0000" size="6"&gt;&lt;strong&gt;http://xcode.codeplex.com/releases/view/73026&lt;/strong&gt;&lt;/font&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/nnhy/aggbug/2171078.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/nnhy/archive/2011/09/08/2171078.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/nnhy/archive/2011/09/01/2161804.html</id><title type="text">XCode中如何使用事务</title><summary type="text">废话不多说，直接上代码： // try之前开始事务 Meta.BeginTrans(); try{ // do something // 强烈建议，尽可能做到只有一次提交事务，以免混乱 Meta.Commit(); } catch{ // 出错了，需要回滚事务 Meta.Rollback(); // 继续向外抛出异常 throw; } XCode还支持多级事务，实际上，除了第一级事务是真实的事...</summary><published>2011-09-01T03:53:00Z</published><updated>2011-09-01T03:53:00Z</updated><author><name>大石头</name><uri>http://www.cnblogs.com/nnhy/</uri></author><link rel="alternate" href="http://www.cnblogs.com/nnhy/archive/2011/09/01/2161804.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/nnhy/archive/2011/09/01/2161804.html"/><content type="html">&lt;p&gt;废话不多说，直接上代码： &lt;p&gt;// try之前开始事务 &lt;p&gt;Meta.BeginTrans(); &lt;p&gt;try{ &lt;p&gt;// do something &lt;p&gt;// 强烈建议，尽可能做到只有一次提交事务，以免混乱 &lt;p&gt;&amp;nbsp; Meta.Commit(); &lt;p&gt;} &lt;p&gt;catch{ &lt;p&gt;// 出错了，需要回滚事务 &lt;p&gt;&amp;nbsp; Meta.Rollback(); &lt;p&gt;// 继续向外抛出异常 &lt;p&gt;throw; &lt;p&gt;} &lt;p&gt;XCode还支持多级事务，实际上，除了第一级事务是真实的事务外，第一级以上的事务全部都是事务计数器加一减一而已，BeginTrans加一，Commit和Rollback减一，减到0时执行真正的提交或回滚。 &lt;p&gt;这个多级事务实现比较简单，只考虑了常见的情况。 &lt;p&gt;&amp;nbsp; &lt;p&gt;XCode地址：http://xcode.codeplex.com &lt;p&gt;BTW，提前Show一下&lt;strong&gt;&lt;font color="#ff0000" size="6"&gt;NewLife.XCode v8.0&lt;/font&gt;&lt;/strong&gt; &lt;p&gt;1，扩展了的数据模型 &lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/nnhy/201109/201109011153266748.jpg"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="XR_(FRF[TNJPNLMWC(XAR%E" border="0" alt="XR_(FRF[TNJPNLMWC(XAR%E" src="http://images.cnblogs.com/cnblogs_com/nnhy/201109/201109011153261241.jpg" width="1401" height="884"&gt;&lt;/a&gt; &lt;p&gt;2，增加索引和表关系特性，自动生成扩展属性&lt;/p&gt; &lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/nnhy/201109/201109011153276257.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://images.cnblogs.com/cnblogs_com/nnhy/201109/201109011153273226.png" width="653" height="579"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;3，另一边也是有扩展属性的&lt;/p&gt; &lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/nnhy/201109/201109011153271830.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://images.cnblogs.com/cnblogs_com/nnhy/201109/201109011153277162.png" width="755" height="819"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;4，根据索引可以生成扩展查询（在考虑优化为自动采用实体缓存）&lt;/p&gt; &lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/nnhy/201109/201109011153272179.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://images.cnblogs.com/cnblogs_com/nnhy/201109/201109011153277752.png" width="691" height="784"&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/nnhy/aggbug/2161804.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/nnhy/archive/2011/09/01/2161804.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry></feed>
