<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>مدونة النبهاني</title>
	<atom:link href="http://alnabhani.wordpress.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://alnabhani.wordpress.com</link>
	<description>أحدث مواضيعي البرمجية والتقنية</description>
	<lastBuildDate>Mon, 14 Dec 2009 05:14:30 +0000</lastBuildDate>
	<generator>http://wordpress.com/</generator>
	<language>ar</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<cloud domain='alnabhani.wordpress.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://www.gravatar.com/blavatar/91abf77f7c013d66c6f253d8802f990d?s=96&#038;d=http://s.wordpress.com/i/buttonw-com.png</url>
		<title>مدونة النبهاني</title>
		<link>http://alnabhani.wordpress.com</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://alnabhani.wordpress.com/osd.xml" title="مدونة النبهاني" />
		<item>
		<title>الباب الثاني : استكشاف نموذج كيانات البيانات Entity Data Model</title>
		<link>http://alnabhani.wordpress.com/2009/12/14/%d8%a7%d9%84%d8%a8%d8%a7%d8%a8-%d8%a7%d9%84%d8%ab%d8%a7%d9%86%d9%8a-%d8%a7%d8%b3%d8%aa%d9%83%d8%b4%d8%a7%d9%81-%d9%86%d9%85%d9%88%d8%b0%d8%ac-%d9%83%d9%8a%d8%a7%d9%86%d8%a7%d8%aa-%d8%a7%d9%84%d8%a8/</link>
		<comments>http://alnabhani.wordpress.com/2009/12/14/%d8%a7%d9%84%d8%a8%d8%a7%d8%a8-%d8%a7%d9%84%d8%ab%d8%a7%d9%86%d9%8a-%d8%a7%d8%b3%d8%aa%d9%83%d8%b4%d8%a7%d9%81-%d9%86%d9%85%d9%88%d8%b0%d8%ac-%d9%83%d9%8a%d8%a7%d9%86%d8%a7%d8%aa-%d8%a7%d9%84%d8%a8/#comments</comments>
		<pubDate>Mon, 14 Dec 2009 05:13:09 +0000</pubDate>
		<dc:creator>alnabhani</dc:creator>
				<category><![CDATA[ado.net entity framework]]></category>
		<category><![CDATA[ado.net entity framework; كتاب]]></category>

		<guid isPermaLink="false">http://alnabhani.wordpress.com/2009/12/14/%d8%a7%d9%84%d8%a8%d8%a7%d8%a8-%d8%a7%d9%84%d8%ab%d8%a7%d9%86%d9%8a-%d8%a7%d8%b3%d8%aa%d9%83%d8%b4%d8%a7%d9%81-%d9%86%d9%85%d9%88%d8%b0%d8%ac-%d9%83%d9%8a%d8%a7%d9%86%d8%a7%d8%aa-%d8%a7%d9%84%d8%a8/</guid>
		<description><![CDATA[&#160;
1- ما هو نموذج كيانات البيانات EDM ؟ 
إذا كنت مهتما بمعرفة هذا المفهوم ، فيبدو انك لم تقرأ الباب الماضي فقرة &#34; سمات اطار عمل كيان البيانات Entity Framework &#34; ولانها المرة الاولى ، فلا مشكلة من اعادة كتابة التعريف مجددا لأجلك :
ما هو نموذج كيانات البيانات Entity Data Model ؟ هو عبارة عن [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=alnabhani.wordpress.com&blog=454111&post=149&subd=alnabhani&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>&#160;</p>
<p>1- ما هو نموذج كيانات البيانات EDM ؟ </p>
<p>إذا كنت مهتما بمعرفة هذا المفهوم ، فيبدو انك لم تقرأ الباب الماضي فقرة &quot; سمات اطار عمل كيان البيانات Entity Framework &quot; ولانها المرة الاولى ، فلا مشكلة من اعادة كتابة التعريف مجددا لأجلك :</p>
<p>ما هو نموذج كيانات البيانات Entity Data Model ؟ هو عبارة عن توصيف لتعريف البيانات المبنية في entity framework . وبدون الـ EDM ، لا توجد علاقات Relationships ولا حتى كيانات بيانية entities في مخطط التصميم لديك Design Schema. </p>
<p> <span id="more-149"></span>
<p>ويعد نموذج كيانات البيانات الجسر الواصل بين تطبيقك ومخزن البيانات ، فهو الذي يتيح لك التعامل مع المظهر المفهومي Conceptual View للبيانات بدل من التعامل معها بالطريقة المعهودة على شكل جداول بيانات حقيقية . وتستخدم كل واجهات البرمجة API’s الموجودة في اطار عمل Entitiy Framework ، الـ EDM في كل تواصل مع البيانات ، سواء كان ذلك لمجرد الحصول على البيانات ام من اجل تحديثها . وهنا تأتي أهمية الادوات Tools الخاصة بالـ Entity Framework والتي يقدمها لنا الاستاذ Visual Studio حيث يتكفل نيابة عنك بتوليد كل الفئات Classes اللازمة للعمل مع الكائنات عوضا عن جداول قاعدة البيانات .</p>
<p>سنتعرف في هذا الباب على التكونين المختلفين لنموذج كيانات البيانات ، فسنتعامل مع المصمم Designer وكذلك مع الوجه الآخر والحقيقي وهو نموذج XML .</p>
<p>وفي الحقيقة يتمتع نموذج كيانات البيانات بأهمية كبيرة في اطار العمل Entity Framework ، فهو الذي يتمتع بقدرات توليد الفئات نيابة عنك مريحا اياك من كتابة عشرات بل مئات الاسطر في كل مرة ، وهو الذي يقوم بتعديلها في حالة رغبتك في تعديل أي جزء منها في أي وقت تشاء ، وهو الذي يتكفل نيابه عنك بالاتصال بقاعدة البيانات والاهتمام بالامور المتعقلة به ، وهو الذي يقدم لك امكانية الاستعلام عن الكائنات بدل من البيانات ، ثم يقوم بترجمتها إلى لغة استعلامات بنيوية معتادة ، وهو الذي يقدم لك دعم تعقب التغييرات ، فلا تحتاج إلى المرور بنفسك على كل الكائنات والتحقق من التغييرات التي طرأت عليها وغير هذه من الامور . وبذلك فإن اضطررت على تغيير أي شيء في النموذج Model الخاص بك في أي وقت فغن ذلك لن يكلفك الكثير من الوقت ، بل بمجرد عدة نقرات منك !</p>
<p>بعد كل هذا الكلام ، وكل هذه الاسطر ، اعتقد ان طمعك في الرغبة في الاقتناع بأهمية مفهوم تمثيل البيانات على شكل كائنات قد توقف عن هذا الحد ، وانك أيقنت تماما بأهمية هذا الأمر .</p>
<p>2- بناء أول نموذج بيانات EDM خاص بك :</p>
<p>افتح فيجوال ستوديو وانشيء مشروعا جديدا من نوع Windows Forms ، توجه بعدها إلى القائمة Project واختر Add New Item ، ومن النافذة التي تظهر امامك اختر ADO.NET Entity Data Model :</p>
<p>&#160;</p>
<p><a href="http://www.vb4arab.com/vb/uploaded/486/01260709873.png"><img src="http://www.vb4arab.com/vb/uploaded/486/01260709873.png" width="510" height="306" /></a> </p>
<p>دع اسمه الافتراضي Model1 ثم اضغط على زر Add .    <br />سيظهر امامك المعالج التالي :</p>
<p><img src="http://www.vb4arab.com/vb/uploaded/486/11260709873.png" width="504" height="448" /> </p>
<p>وهو يخيرك بين انشاء EDM فارغ او تكوينه بشكل تلقائي من قاعدة بيانات ، اختر الخيار الاول واضغط على Next ، لتظهر امامك المرحلة التالية من المعالج :</p>
<p>&#160;</p>
<p><img src="http://www.vb4arab.com/vb/uploaded/486/21260709873.png" width="507" height="451" /> </p>
<p>حيث تختار قاعدة البيانات المطلوبة ، وهنا فلتكن قاعدة البيانات التي اتفقنا على استخدامها وهي Northiwnd ، فقم باختيارها اينما كانت لديك ، ثم اضغط على زر Next .    <br />في المرحلة التالية ، سيعرض امامك المعالج كافة الكائنات الموجودة في قاعدة البيانات ، كالجداول Tables ، والعروض views وكذلك الاجراءات المخزنة ، سنقوم في هذا المثال بإضافة الجداول Orders,OrderDetails,Products وتوجه بعدها إلى زر Finish :</p>
<p>&#160;</p>
<p><img src="http://www.vb4arab.com/vb/uploaded/486/31260709873.png" width="498" height="443" /> </p>
<p>الآن سيفتح أمامك فيجوال ستوديو على نافذة مصمم الـ EDM كما بالشكل التالي :</p>
<p>&#160;</p>
<p><img src="http://www.vb4arab.com/vb/uploaded/486/41260709873.png" width="497" height="281" /> </p>
<p>&#160;</p>
<p>بهذا نكون قد تمكنا من انشاء EDM جديد وبه كل الفئات المطلوبة ، حيث يوجد ثلاث كيانات بيانية ( فئات Classes ) وقد اختصر عليك فيجوال ستوديو جهد كتابة عشرات الأسطر لها ، وحتى تتأكد من كلامي يمكنك التوجه إلى نافذة Solution Explorer ، بعدها اختر زر Show All Files واتجه إلى ملف Model1.edmx وافتح مستواه الفرعي واختر ملف Model1.Designer.vb وشاهد الكود الطويل الموجود به :</p>
<p>&#160;</p>
<p><img src="http://www.vb4arab.com/vb/uploaded/486/51260709873.png" width="502" height="305" /> </p>
<p>&#160;</p>
<p>ليس هذا فقط ، فالملف Model1.edmx ما هو الا ملف XML وللتأكيد على كلامي ، يمكنك اغلاق الملف ، ثم النقر على اسمه من solution Explorer بالزر الأيمن واختر الخيار Open With واختر XML Editor وشاهد بنفسك النتيجة :</p>
<p>&#160;</p>
<p><img src="http://www.vb4arab.com/vb/uploaded/486/01260710154.png" width="503" height="306" /> </p>
<p>كرمي البرمجي يحتم علي الا ان اعرض عليك مثالا عن كيفية استخدام النموذج السابق في عرض البيانات ، لذلك توجه إلى نافذة Data Sources واختر منها Add New Data Source ومن النافذة التي ستظهر امامك طبعا اختر الخيار Objects :</p>
<p>&#160;</p>
<p><img src="http://www.vb4arab.com/vb/uploaded/486/11260710154.png" width="502" height="387" /> </p>
<p>ومن الخطوة التالية افتح اسم المشروع واختر الفئة Orders :</p>
<p>&#160;</p>
<p><img src="http://www.vb4arab.com/vb/uploaded/486/21260710154.png" width="508" height="392" /> </p>
<p>ثم انه المعالج بالزر Finish ، وتوجه بعدها إلى النافذة Form1 وستشاهد ان النافذة Data Sources ستكون بالشكل التالي :</p>
<p><img src="http://www.vb4arab.com/vb/uploaded/486/31260710154.png" /> </p>
<p>&#160;</p>
<p>حيث ظهر الجدول Orders والحقول التابعه له ، لكن مهلا تذكر ان تلك كائنات وليست جدول وحقوله ! والسبب اننا اشرنا إلى الفئات والحقول التي تم توليدها من خلال الـ EDM ، لذلك قم بسحب الجدول Orders إلى النافذة Form1 وستكون النتيجة كما يلي :</p>
<p>&#160;</p>
<p><img src="http://www.vb4arab.com/vb/uploaded/486/41260710154.png" /> </p>
<p>وتوجه بعدها إلى حدث التحميل Form_Load التابع للنافذة form1 واكتب الكود التالي :</p>
<p>&#160;</p>
<div style="border-bottom:silver 1px solid;text-align:left;border-left:silver 1px solid;line-height:12pt;background-color:#f4f4f4;width:97.5%;font-family:&#39;direction:ltr;max-height:200px;font-size:8pt;overflow:auto;border-top:silver 1px solid;cursor:text;border-right:silver 1px solid;margin:20px 0 10px;padding:4px;" id="codeSnippetWrapper">
<div style="text-align:left;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:&#39;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0;" id="codeSnippet">
<pre style="text-align:left;line-height:12pt;background-color:white;width:100%;font-family:&#39;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;margin:0;padding:0;"><span style="color:#606060;" id="lnum1">   1:</span> <span style="color:#0000ff;">Dim</span> MyOrders <span style="color:#0000ff;">As</span> <span style="color:#0000ff;">New</span> NORTHWNDEntities</pre>
<p><!--CRLF--></p>
<pre style="text-align:left;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:&#39;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;margin:0;padding:0;"><span style="color:#606060;" id="lnum2">   2:</span>  </pre>
<p><!--CRLF--></p>
<pre style="text-align:left;line-height:12pt;background-color:white;width:100%;font-family:&#39;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;margin:0;padding:0;"><span style="color:#606060;" id="lnum3">   3:</span> <span style="color:#0000ff;">Me</span>.OrdersBindingSource.DataSource = MyOrders.Orders</pre>
<p><!--CRLF--></div>
</div>
<p>ثم قم بتشغيل البرنامج ليظهر لك وقد ازدان بالبيانات :</p>
<p><img src="http://www.vb4arab.com/vb/uploaded/486/51260710154.png" /> </p>
<p>&#160;</p>
<p>مبارك ! فقد انتهيت من هذا من تكوين EDM جديد من قاعدة البيانات Northwind يخص الجداول الثلاثة Orders,OrderDetails,Products وشاهدنا كيف ان المعالج ولد نيابة عنا مئات الأسطر البرمجية القياسية ، وقد قمنا بعمل ربط بسيط Simple binding للبيانات على اداة DataGridView وشاهدنا كيف ان كل هذا سهل جدا ولا يتخطى خطوات صغيرة وقصيرة .<br />
  <br />1- مصمم كيانات البيانات Entity Designer وخصائص الكيانات Entities Properties : </p>
<p>كما تلاحظ ، فإن مصمم كيانات البيانات يزيح عنا الكثير من العمل ، ويجعل من انشاء كيانات entities وتعديلها في أي وقت امرا سهلا ، بعيدا عن كوابيس تعديل مئات الاسطر والشوائب والمشاكل التي تنتج عن ذلك .</p>
<p>
  <br />عندما قمنا بإنشاء اول نموذج بيانات ، كانت فاعتقد انك لاحظت ان كل جدول تم اختياره من قاعدة البيانات تم تمثيله على هيئة كيان entity ، تحتوي على خصائص تمثل الحقول المختارة من الجدول ، كما أن حقل المفتاح الأساسي PrimaryKey يمثل بما يدعى بمفتاح الكيان entity key . </p>
<p>بالنسبة للعلاقات Relationships ، فإنها ممثله بخط يصل بين الجداول المرتبطة ويحتوي على عنوان يمثل نوع العلاقة : واحد لواحد ، لوحد لمتعدد ، متعدد لمتعدد . والعلاقات هنا ما هي الا كائنات Object من نوع خاص وهو association بين الفئات . </p>
<p>
  <br />وهناك ما يعرف بالـ Navigation Properties وهي خصائص تمثل الجداول الفرعية المربوطة بعلاقات ، فالجدول Orders مرتبط بالجدول OrderDetails ، لذلك فالكيان Orders ستحتوي على Navigation Property &quot;خاصية ابحار &quot; تسمى OrderDetails طالما اننا قمنا بوضع الجدول OrderDetail sايضا في EDM فسيقوم المصمم Designer مباشرة بإضفة خاصية ابحار Navigation Property للكيان Orders . </p>
<p>اذا قمنا باختيار أي حقل من أي جدول ، اقصد أي كائن من أي كيان entity ، فيمكننا مطالعة خصائصه من مربع الحوار Properties ، والتي من اهمها : EntityKey,Type,Name كما بالشكل التالي :</p>
<p><img src="http://www.vb4arab.com/vb/uploaded/486/01260710533.png" /> </p>
<p>وبالنسبة إلى خاصية الاسم Name فهي مفيدة جدا في اعطاء الكائنات اسماء اخرى اكثر منقطية More Logical تجعل من المطور قادر على تعيين اسماء خاصة لكل كائن حسب حاجته وما يرتاح إليه .<br />
  <br />وبالمناسبة ، فهناك نافذتين اضافيتين تساعداننا في العمل مع الـ EDM وهما : Model Browser و Mapping Details ، الأولى شبيهه بنافذة الـ Class View حيث تعرض وجهين مختلفين لل EDM وهما وجه الفئات Classes ووجه قاعدة البيانات Data Store ، اما الثانية ، فهي تشبه نافذة تفاصيل الفئة Class Details حيث يمكنك التحكم بالحقول واضافتها وتعديل بعض خصائصها ، بالاضافة إلى اضافة شروط Conditions وأمور اخرى سنتعرف عليها لاحقا اذا شاء الله . </p>
<p>وبالنسبة إلى نافذة الادوات Tools فستجد هناك لسان تبويب بالإسم Entity Framework يحتوي على عدة ادوات : Entity,Association,Inheretance ، سنتعرف عليها ايضا لاحقا . </p>
<p>وكما تلاحظ ، كل شيء عبارة عن فئات لها كائناتها ، وكل كائن بخصائصه ، أليس هذا أفضل وأسهل من التعامل مع جدول بحقوله ؟ </p>
<p>1- بنية ملف نموذج كيان البيانات EDM : </p>
<p>قلنا سابقا ان الـ Designer والـ EDM يريحان المبرمج ويحملان عن كاهله عملية توليد اكواد كثيرة جدا لفئات وكائنات يحتاجها في التعامل مع البيانات ، وقد سبق وان قمنا بفتح الملف Model1.Designer.vb ورأينا ان به اكواد كثيرة جدا ، ومن باب العلم بالشيء ، ولأنني اريد منك ان تعرف ما يدور خلف الكواليس حتى تفهم القضيه اكثر ، فضلت عرض هذه الفقرة عليك حتى تكون مطلعا اكثر : </p>
<p>في الحقيقة ، يوجد في ملف الـ EDM مجموعة من الفئات Classes تنقسم إلى نوعين : النوع الأول وهي فئة تدير باقي الفئات وتمثل المدير Manager ، بينما النوع الثاني وهي الفئات التي تمثل الجداول او كيانات البيانات entities . </p>
<p>ففي المثال الذي قمنا بعمله سابقا ، يوجد فئة تحمل الاسم NORTHWINDEntities وهي التي تمثل المدير Manager والذي من خلاله نتحكم بالـ Entities ، وهناك ثلاث فئات تحمل الاسماء : Products,Orders,OrderDetails كل منها تمثل Entity والتي قد تمثل جدول واحد او اكثر من قاعدة البيانات .</p>
<p>
  <br />وسنتعرف بالتفصيل على بنية الفئات السابقة : </p>
<p>
  <br />1- بنية فئة المدير : NORTHWINDEntities : </p>
<p>اذا كنت تذكر في السابق عندما قمنا بعمل اول برنامج يعتمد على الـ Entities ، فقد مر علينا في مرحلة اختيار عناصر قاعدة البيانات ادخل اسم فئة المدير تم تسميتها في حينها Model Namespace ، تكون هذه الفئة هي المدير الفعلي لباقي الفئات والمتحكم الحقيقي بها . </p>
<p>هذه الفئة معرفة على انها فئة جزئية Partial ، الأمر الذي يعني قابلية كتابتها في ملفات اخرى في المشروع ، وهذا يهم من يستخدم مبدأ تعدد الطبقات N-tier والذي سنتحدث عنه مستقبلا . هذه الفئة مشتقه من الفئة Global.System.Data.Objects.ObjectContext وبالتالي فهي ممثله الشرعي ، وكنا قد تحدثنا سابقا عن ان الكائن ObjectContext انه كائن مهم جدا في اطار العمل EF . </p>
<p>تحتوي على خصائص تمثل كل واحده منها Entity ، فهناك خصائص تحمل الاسم Products,Orders,OrderDetails وهذا على سبيل المثال تعريف الخاصية Orders :</p>
<p>&#160;</p>
<div style="border-bottom:silver 1px solid;text-align:left;border-left:silver 1px solid;line-height:12pt;background-color:#f4f4f4;width:97.5%;font-family:&#39;direction:ltr;max-height:200px;font-size:8pt;overflow:auto;border-top:silver 1px solid;cursor:text;border-right:silver 1px solid;margin:20px 0 10px;padding:4px;" id="codeSnippetWrapper">
<div style="text-align:left;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:&#39;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0;" id="codeSnippet">
<pre style="text-align:left;line-height:12pt;background-color:white;width:100%;font-family:&#39;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;margin:0;padding:0;"><span style="color:#606060;" id="lnum1">   1:</span> <span style="color:#008000;">'''&lt;summary&gt;</span></pre>
<p><!--CRLF--></p>
<pre style="text-align:left;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:&#39;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;margin:0;padding:0;"><span style="color:#606060;" id="lnum2">   2:</span> <span style="color:#008000;">'''There are no comments for Orders in the schema.</span></pre>
<p><!--CRLF--></p>
<pre style="text-align:left;line-height:12pt;background-color:white;width:100%;font-family:&#39;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;margin:0;padding:0;"><span style="color:#606060;" id="lnum3">   3:</span> <span style="color:#008000;">'''&lt;/summary&gt;</span></pre>
<p><!--CRLF--></p>
<pre style="text-align:left;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:&#39;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;margin:0;padding:0;"><span style="color:#606060;" id="lnum4">   4:</span> <span style="color:#0000ff;">Public</span> <span style="color:#0000ff;">ReadOnly</span> <span style="color:#0000ff;">Property</span> Orders() <span style="color:#0000ff;">As</span> <span style="color:#0000ff;">Global</span>.System.Data.Objects.ObjectQuery(Of Orders)</pre>
<p><!--CRLF--></p>
<pre style="text-align:left;line-height:12pt;background-color:white;width:100%;font-family:&#39;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;margin:0;padding:0;"><span style="color:#606060;" id="lnum5">   5:</span>     <span style="color:#0000ff;">Get</span></pre>
<p><!--CRLF--></p>
<pre style="text-align:left;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:&#39;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;margin:0;padding:0;"><span style="color:#606060;" id="lnum6">   6:</span>         <span style="color:#0000ff;">If</span> (<span style="color:#0000ff;">Me</span>._Orders <span style="color:#0000ff;">Is</span> <span style="color:#0000ff;">Nothing</span>) <span style="color:#0000ff;">Then</span></pre>
<p><!--CRLF--></p>
<pre style="text-align:left;line-height:12pt;background-color:white;width:100%;font-family:&#39;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;margin:0;padding:0;"><span style="color:#606060;" id="lnum7">   7:</span>             <span style="color:#0000ff;">Me</span>._Orders = <span style="color:#0000ff;">MyBase</span>.CreateQuery(Of Orders)(<span style="color:#006080;">&quot;[Orders]&quot;</span>)</pre>
<p><!--CRLF--></p>
<pre style="text-align:left;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:&#39;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;margin:0;padding:0;"><span style="color:#606060;" id="lnum8">   8:</span>         <span style="color:#0000ff;">End</span> <span style="color:#0000ff;">If</span></pre>
<p><!--CRLF--></p>
<pre style="text-align:left;line-height:12pt;background-color:white;width:100%;font-family:&#39;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;margin:0;padding:0;"><span style="color:#606060;" id="lnum9">   9:</span>         <span style="color:#0000ff;">Return</span> <span style="color:#0000ff;">Me</span>._Orders</pre>
<p><!--CRLF--></p>
<pre style="text-align:left;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:&#39;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;margin:0;padding:0;"><span style="color:#606060;" id="lnum10">  10:</span>     <span style="color:#0000ff;">End</span> <span style="color:#0000ff;">Get</span></pre>
<p><!--CRLF--></p>
<pre style="text-align:left;line-height:12pt;background-color:white;width:100%;font-family:&#39;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;margin:0;padding:0;"><span style="color:#606060;" id="lnum11">  11:</span> <span style="color:#0000ff;">End</span> <span style="color:#0000ff;">Property</span>   <span style="color:#0000ff;">Private</span> _Orders <span style="color:#0000ff;">As</span> <span style="color:#0000ff;">Global</span>.System.Data.Objects.ObjectQuery(Of Orders)</pre>
<p><!--CRLF--></div>
</div>
<p>ومن الكود السابق ، نستنتج ان الخاصية التي تمثل ال Entity المدعوه Orders ما هي الا كائن من النوع ObjectQuery للفئة Orders . الكود السابق سيكون مفهوما اكثر بعد قراءتك للفصول القادمة من الكتاب .<br />
  <br />ستجد ايضا ان هناك طريقة Method بالإسم AddToXXX حيث XXX هو اسم الـ Entituy وهي طريقة تستخدم في اضافة كائن جديد &quot; سجل جديد &quot; إلى الكيان المعنية . </p>
<p>ايضا تحتوي هذه الفئة على ثلاث مشيدات Constructors مختلفة ، وحدث Event يدعى SavingChanges يتم اطلاقه بمجرد الرغبة في حفظ التعديلات، وطريقة تسمى OnContextCreated يتم استدعاؤها من قبل المشيدات لأي غرض تراه مناسبا . </p>
<p>1- بنية فئة الكيان Entity : Orders : </p>
<p>هذه الفئة مشتقه من الفئة EntityClient لذلك فهي ممثلها الرسمي ، واعتقد ان فقرة &quot;مميزات وخصائص اطار العمل &quot; والحديث عن ObjectServices و EntityClient أصبح واضحا ومفهوما اكثر . </p>
<p>تتكون هذه الفئة من مجموعة من الخصائص Properties ، تمثل كل خاصية منها كائنا &quot; حقلا في الجدول الحقيقي &quot; ، ومنها على سبيل المثال الخاصية OrderID والتي تعريفها كما يلي :</p>
<p>&#160;</p>
<div style="border-bottom:silver 1px solid;text-align:left;border-left:silver 1px solid;line-height:12pt;background-color:#f4f4f4;width:97.5%;font-family:&#39;direction:ltr;max-height:200px;font-size:8pt;overflow:auto;border-top:silver 1px solid;cursor:text;border-right:silver 1px solid;margin:20px 0 10px;padding:4px;" id="codeSnippetWrapper">
<div style="text-align:left;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:&#39;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0;" id="codeSnippet">
<pre style="text-align:left;line-height:12pt;background-color:white;width:100%;font-family:&#39;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;margin:0;padding:0;"><span style="color:#606060;" id="lnum1">   1:</span> &lt;<span style="color:#0000ff;">Global</span>.System.Data.Objects.DataClasses.EdmScalarPropertyAttribute(EntityKeyProperty:=<span style="color:#0000ff;">true</span>, IsNullable:=<span style="color:#0000ff;">false</span>),  _</pre>
<p><!--CRLF--></p>
<pre style="text-align:left;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:&#39;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;margin:0;padding:0;"><span style="color:#606060;" id="lnum2">   2:</span>     <span style="color:#0000ff;">Global</span>.System.Runtime.Serialization.DataMemberAttribute()&gt;  _</pre>
<p><!--CRLF--></p>
<pre style="text-align:left;line-height:12pt;background-color:white;width:100%;font-family:&#39;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;margin:0;padding:0;"><span style="color:#606060;" id="lnum3">   3:</span>    <span style="color:#0000ff;">Public</span> <span style="color:#0000ff;">Property</span> OrderID() <span style="color:#0000ff;">As</span> <span style="color:#0000ff;">Integer</span></pre>
<p><!--CRLF--></p>
<pre style="text-align:left;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:&#39;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;margin:0;padding:0;"><span style="color:#606060;" id="lnum4">   4:</span>        <span style="color:#0000ff;">Get</span></pre>
<p><!--CRLF--></p>
<pre style="text-align:left;line-height:12pt;background-color:white;width:100%;font-family:&#39;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;margin:0;padding:0;"><span style="color:#606060;" id="lnum5">   5:</span>            <span style="color:#0000ff;">Return</span> <span style="color:#0000ff;">Me</span>._OrderID</pre>
<p><!--CRLF--></p>
<pre style="text-align:left;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:&#39;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;margin:0;padding:0;"><span style="color:#606060;" id="lnum6">   6:</span>        <span style="color:#0000ff;">End</span> <span style="color:#0000ff;">Get</span></pre>
<p><!--CRLF--></p>
<pre style="text-align:left;line-height:12pt;background-color:white;width:100%;font-family:&#39;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;margin:0;padding:0;"><span style="color:#606060;" id="lnum7">   7:</span>        <span style="color:#0000ff;">Set</span></pre>
<p><!--CRLF--></p>
<pre style="text-align:left;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:&#39;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;margin:0;padding:0;"><span style="color:#606060;" id="lnum8">   8:</span>            <span style="color:#0000ff;">Me</span>.OnOrderIDChanging(value)</pre>
<p><!--CRLF--></p>
<pre style="text-align:left;line-height:12pt;background-color:white;width:100%;font-family:&#39;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;margin:0;padding:0;"><span style="color:#606060;" id="lnum9">   9:</span>            <span style="color:#0000ff;">Me</span>.ReportPropertyChanging(<span style="color:#006080;">&quot;OrderID&quot;</span>)</pre>
<p><!--CRLF--></p>
<pre style="text-align:left;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:&#39;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;margin:0;padding:0;"><span style="color:#606060;" id="lnum10">  10:</span>            <span style="color:#0000ff;">Me</span>._OrderID = <span style="color:#0000ff;">Global</span>.System.Data.Objects.DataClasses.StructuralObject.SetValidValue(value)</pre>
<p><!--CRLF--></p>
<pre style="text-align:left;line-height:12pt;background-color:white;width:100%;font-family:&#39;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;margin:0;padding:0;"><span style="color:#606060;" id="lnum11">  11:</span>            <span style="color:#0000ff;">Me</span>.ReportPropertyChanged(<span style="color:#006080;">&quot;OrderID&quot;</span>)</pre>
<p><!--CRLF--></p>
<pre style="text-align:left;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:&#39;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;margin:0;padding:0;"><span style="color:#606060;" id="lnum12">  12:</span>            <span style="color:#0000ff;">Me</span>.OnOrderIDChanged</pre>
<p><!--CRLF--></p>
<pre style="text-align:left;line-height:12pt;background-color:white;width:100%;font-family:&#39;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;margin:0;padding:0;"><span style="color:#606060;" id="lnum13">  13:</span>        <span style="color:#0000ff;">End</span> <span style="color:#0000ff;">Set</span></pre>
<p><!--CRLF--></p>
<pre style="text-align:left;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:&#39;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;margin:0;padding:0;"><span style="color:#606060;" id="lnum14">  14:</span>    <span style="color:#0000ff;">End</span> <span style="color:#0000ff;">Property</span>   <span style="color:#0000ff;">Private</span> _OrderID <span style="color:#0000ff;">As</span> Integer</pre>
<p><!--CRLF--></div>
</div>
<p>تخبر المصمم Designer ان هذه الخاصية تتبع المجموعة ScalerProperties والتي تقابل حقول في جداول قاعدة البيانات ، والثانية تساعدنا في استخدام هذه الخاصية كعضو بيانات DataMember عندما نتعامل مع Windows Forms او WPF وغيرها من تقنيات العرض .<br />
  <br />وهناك استدعاء للطريقة ReportPropertyChanging والمعرفة في الفئة القاعدية EntityClient ، وهي التي تمثل ميزة تعقب التغييرات Changes Tracing التي تحدثنا عنها في الباب الأول . لدي المزيد لأخبرك عنه في الكود السابق في الفقرة التالية الخاصة بالطرق . </p>
<p>بالنسبة للطرق المتوفرة ، فهناك الطريقتان OnXXXChanged OnXXXChanging واللتان تستخدمان عندما يبدأ تعديل قيمة أي حقل وبعد الانتهاء من التعديل على التوالي . </p>
<p>وهناك الطريقة CreateXXX والتي تستخدم في انشاء كائن جديد من الفئة الحالية ، كالطريقة التالية :</p>
<p>&#160;</p>
<div style="border-bottom:silver 1px solid;text-align:left;border-left:silver 1px solid;line-height:12pt;background-color:#f4f4f4;width:97.5%;font-family:&#39;direction:ltr;max-height:200px;font-size:8pt;overflow:auto;border-top:silver 1px solid;cursor:text;border-right:silver 1px solid;margin:20px 0 10px;padding:4px;" id="codeSnippetWrapper">
<div style="text-align:left;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:&#39;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0;" id="codeSnippet">
<pre style="text-align:left;line-height:12pt;background-color:white;width:100%;font-family:&#39;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;margin:0;padding:0;"><span style="color:#606060;" id="lnum1">   1:</span> <span style="color:#0000ff;">Public</span> <span style="color:#0000ff;">Shared</span> <span style="color:#0000ff;">Function</span> CreateOrders(<span style="color:#0000ff;">ByVal</span> orderID <span style="color:#0000ff;">As</span> <span style="color:#0000ff;">Integer</span>) <span style="color:#0000ff;">As</span> Orders</pre>
<p><!--CRLF--></p>
<pre style="text-align:left;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:&#39;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;margin:0;padding:0;"><span style="color:#606060;" id="lnum2">   2:</span>     <span style="color:#0000ff;">Dim</span> orders <span style="color:#0000ff;">As</span> Orders = <span style="color:#0000ff;">New</span> Orders</pre>
<p><!--CRLF--></p>
<pre style="text-align:left;line-height:12pt;background-color:white;width:100%;font-family:&#39;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;margin:0;padding:0;"><span style="color:#606060;" id="lnum3">   3:</span>     orders.OrderID = orderID</pre>
<p><!--CRLF--></p>
<pre style="text-align:left;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:&#39;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;margin:0;padding:0;"><span style="color:#606060;" id="lnum4">   4:</span>     <span style="color:#0000ff;">Return</span> orders   <span style="color:#0000ff;">End</span> Function</pre>
<p><!--CRLF--></div>
</div>
<p>وبالنسبة للاحداث Events ، فهناك الحدثان PropertyChanged و PropertyChangingفالأول يتم تنفيذه عند بداية التعديل والثاني بعد انتهاء التعديل . جدير بالذكر ان هذان الحدثان لا يتبعان الفئة EntityClient وإنما فضاء الأسماء System.componentModel .<br />
  <br />واعتقد انك الآن وصلت إلى مرحلة استوعبت فيها الكثير عن بنية أي نموذج كيانات بيانات EDM .</p>
<p>&#160;</p>
<p>&#160;</p>
<p>1- المكونات الثلاث الرئيسية لملف النموذج Model.edmx :<br />
  <br />هذا الجزء بالذات يحاول الكثير من المبرمجين تجاهله نظرا لأنهم يعتقدون عدم حاجتهم لتعديله او تطويره ، ولكن لو تذكر في الباب الماضي ، تحدثنا عن ان هناك المزيد من الخصائص والقدرات في نموذج البيانات EDM غير موجودة في المصمم Designer ولكنها متاحة للتعديل والاضافة بشكل يدوي في ملف الـ XML ، ومن هنا تأتي اهمية الحديث عن هذا الموضوع ، الا انني لن اطيل فيه كثير ان شاء الله تعالى لأنني اعلم ان الكثيرين يشمئزون من لغة XML ولو انها رائعة ! </p>
<p>يتكون الملف Model.edmx من ثلاثة اجزاء رئيسية وهي النموذج المفهومي Conceptual Model ، الخريطة Mapping ، و نموذج التخزين والمنطق Storage/Logical Model . </p>
<p>النموذج المفهومي Conceptual Model ، هو جزء يختص بهيكلة النموذج ، حيث تجد فيه كل الـكيانات Entities وكائناتها ، بالاضافة إلى أي علاقات Associsations بينها . وفي حقيقة الامر ، الكيانات Entities من النوع EntityType ، وهناك ما يعرف بالـ EntityContainer وهناك يتم تعريف فضاء الاسماء الذي يتبعه الـ EDM وكل جزء من الـ Entity مع مقابله في الفئات التي توجد في الملف Model.Designer.vb . وهناك تفرع خاص بالعلاقات Associations يتم فيه تعريف العلاقات ونوعها . </p>
<p>الخريطة Mapping ، وفيها يتم ذكر كل entity والكائنات التابعة لها ، هذا مثال للكيان Orders :</p>
<p>&#160;</p>
<div style="border-bottom:silver 1px solid;text-align:left;border-left:silver 1px solid;line-height:12pt;background-color:#f4f4f4;width:97.5%;font-family:&#39;direction:ltr;max-height:200px;font-size:8pt;overflow:auto;border-top:silver 1px solid;cursor:text;border-right:silver 1px solid;margin:20px 0 10px;padding:4px;" id="codeSnippetWrapper">
<div style="text-align:left;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:&#39;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0;" id="codeSnippet">
<pre style="text-align:left;line-height:12pt;background-color:white;width:100%;font-family:&#39;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;margin:0;padding:0;"><span style="color:#606060;" id="lnum1">   1:</span> <span style="color:#0000ff;">&lt;</span><span style="color:#800000;">EntityTypeMapping</span> <span style="color:#ff0000;">TypeName</span><span style="color:#0000ff;">=&quot;IsTypeOf(NORTHWNDModel.Products)&quot;</span><span style="color:#0000ff;">&gt;</span></pre>
<p><!--CRLF--></p>
<pre style="text-align:left;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:&#39;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;margin:0;padding:0;"><span style="color:#606060;" id="lnum2">   2:</span>        <span style="color:#0000ff;">&lt;</span><span style="color:#800000;">MappingFragment</span> <span style="color:#ff0000;">StoreEntitySet</span><span style="color:#0000ff;">=&quot;Products&quot;</span><span style="color:#0000ff;">&gt;</span></pre>
<p><!--CRLF--></p>
<pre style="text-align:left;line-height:12pt;background-color:white;width:100%;font-family:&#39;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;margin:0;padding:0;"><span style="color:#606060;" id="lnum3">   3:</span>          <span style="color:#0000ff;">&lt;</span><span style="color:#800000;">ScalarProperty</span> <span style="color:#ff0000;">Name</span><span style="color:#0000ff;">=&quot;CategoryID&quot;</span> <span style="color:#ff0000;">ColumnName</span><span style="color:#0000ff;">=&quot;CategoryID&quot;</span> <span style="color:#0000ff;">/&gt;</span></pre>
<p><!--CRLF--></p>
<pre style="text-align:left;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:&#39;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;margin:0;padding:0;"><span style="color:#606060;" id="lnum4">   4:</span>          <span style="color:#0000ff;">&lt;</span><span style="color:#800000;">ScalarProperty</span> <span style="color:#ff0000;">Name</span><span style="color:#0000ff;">=&quot;Discontinued&quot;</span> <span style="color:#ff0000;">ColumnName</span><span style="color:#0000ff;">=&quot;Discontinued&quot;</span> <span style="color:#0000ff;">/&gt;</span></pre>
<p><!--CRLF--></p>
<pre style="text-align:left;line-height:12pt;background-color:white;width:100%;font-family:&#39;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;margin:0;padding:0;"><span style="color:#606060;" id="lnum5">   5:</span>          <span style="color:#0000ff;">&lt;</span><span style="color:#800000;">ScalarProperty</span> <span style="color:#ff0000;">Name</span><span style="color:#0000ff;">=&quot;ProductID&quot;</span> <span style="color:#ff0000;">ColumnName</span><span style="color:#0000ff;">=&quot;ProductID&quot;</span> <span style="color:#0000ff;">/&gt;</span></pre>
<p><!--CRLF--></p>
<pre style="text-align:left;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:&#39;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;margin:0;padding:0;"><span style="color:#606060;" id="lnum6">   6:</span>          <span style="color:#0000ff;">&lt;</span><span style="color:#800000;">ScalarProperty</span> <span style="color:#ff0000;">Name</span><span style="color:#0000ff;">=&quot;ProductName&quot;</span> <span style="color:#ff0000;">ColumnName</span><span style="color:#0000ff;">=&quot;ProductName&quot;</span> <span style="color:#0000ff;">/&gt;</span></pre>
<p><!--CRLF--></p>
<pre style="text-align:left;line-height:12pt;background-color:white;width:100%;font-family:&#39;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;margin:0;padding:0;"><span style="color:#606060;" id="lnum7">   7:</span>          <span style="color:#0000ff;">&lt;</span><span style="color:#800000;">ScalarProperty</span> <span style="color:#ff0000;">Name</span><span style="color:#0000ff;">=&quot;QuantityPerUnit&quot;</span> <span style="color:#ff0000;">ColumnName</span><span style="color:#0000ff;">=&quot;QuantityPerUnit&quot;</span> <span style="color:#0000ff;">/&gt;</span></pre>
<p><!--CRLF--></p>
<pre style="text-align:left;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:&#39;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;margin:0;padding:0;"><span style="color:#606060;" id="lnum8">   8:</span>          <span style="color:#0000ff;">&lt;</span><span style="color:#800000;">ScalarProperty</span> <span style="color:#ff0000;">Name</span><span style="color:#0000ff;">=&quot;ReorderLevel&quot;</span> <span style="color:#ff0000;">ColumnName</span><span style="color:#0000ff;">=&quot;ReorderLevel&quot;</span> <span style="color:#0000ff;">/&gt;</span></pre>
<p><!--CRLF--></p>
<pre style="text-align:left;line-height:12pt;background-color:white;width:100%;font-family:&#39;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;margin:0;padding:0;"><span style="color:#606060;" id="lnum9">   9:</span>          <span style="color:#0000ff;">&lt;</span><span style="color:#800000;">ScalarProperty</span> <span style="color:#ff0000;">Name</span><span style="color:#0000ff;">=&quot;SupplierID&quot;</span> <span style="color:#ff0000;">ColumnName</span><span style="color:#0000ff;">=&quot;SupplierID&quot;</span> <span style="color:#0000ff;">/&gt;</span></pre>
<p><!--CRLF--></p>
<pre style="text-align:left;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:&#39;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;margin:0;padding:0;"><span style="color:#606060;" id="lnum10">  10:</span>          <span style="color:#0000ff;">&lt;</span><span style="color:#800000;">ScalarProperty</span> <span style="color:#ff0000;">Name</span><span style="color:#0000ff;">=&quot;UnitPrice&quot;</span> <span style="color:#ff0000;">ColumnName</span><span style="color:#0000ff;">=&quot;UnitPrice&quot;</span> <span style="color:#0000ff;">/&gt;</span></pre>
<p><!--CRLF--></p>
<pre style="text-align:left;line-height:12pt;background-color:white;width:100%;font-family:&#39;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;margin:0;padding:0;"><span style="color:#606060;" id="lnum11">  11:</span>          <span style="color:#0000ff;">&lt;</span><span style="color:#800000;">ScalarProperty</span> <span style="color:#ff0000;">Name</span><span style="color:#0000ff;">=&quot;UnitsInStock&quot;</span> <span style="color:#ff0000;">ColumnName</span><span style="color:#0000ff;">=&quot;UnitsInStock&quot;</span> <span style="color:#0000ff;">/&gt;</span></pre>
<p><!--CRLF--></p>
<pre style="text-align:left;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:&#39;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;margin:0;padding:0;"><span style="color:#606060;" id="lnum12">  12:</span>          <span style="color:#0000ff;">&lt;</span><span style="color:#800000;">ScalarProperty</span> <span style="color:#ff0000;">Name</span><span style="color:#0000ff;">=&quot;UnitsOnOrder&quot;</span> <span style="color:#ff0000;">ColumnName</span><span style="color:#0000ff;">=&quot;UnitsOnOrder&quot;</span> <span style="color:#0000ff;">/&gt;</span></pre>
<p><!--CRLF--></p>
<pre style="text-align:left;line-height:12pt;background-color:white;width:100%;font-family:&#39;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;margin:0;padding:0;"><span style="color:#606060;" id="lnum13">  13:</span>        <span style="color:#0000ff;">&lt;/</span><span style="color:#800000;">MappingFragment</span><span style="color:#0000ff;">&gt;</span></pre>
<p><!--CRLF--></p>
<pre style="text-align:left;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:&#39;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;margin:0;padding:0;"><span style="color:#606060;" id="lnum14">  14:</span>      <span style="color:#0000ff;">&lt;/</span><span style="color:#800000;">EntityTypeMapping</span><span style="color:#0000ff;">&gt;</span></pre>
<p><!--CRLF--></p>
<pre style="text-align:left;line-height:12pt;background-color:white;width:100%;font-family:&#39;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;margin:0;padding:0;"><span style="color:#606060;" id="lnum15">  15:</span>    <span style="color:#0000ff;">&lt;/</span><span style="color:#800000;">EntitySetMapping</span><span style="color:#0000ff;">&gt;</span></pre>
<p><!--CRLF--></div>
</div>
<p>الجزء الثالث وهو StorageModel ، وهو الذي يتمثل العلاقه الحقيقيه بين كل الكيانات entities والكائنات التابعه لها ، والجداول في قاعدة البيانات والحقول التابعه لها ، فكما اتفقنا منذ بداية الأمر ، ان نموذج كيانات البيانات لايشترط ان يطابق الجداول الحقيقية في قاعدة البيانات ، فقد يتم وضع كيان واحدة لجدولين في قاعدة البيانات وغيرها من الاحتمالات المختلفة التي تصب في صميم هذه التقنية ، لذلك فهذا الجزء هو الجزء المتعلق بهذا الامر .<br />
  <br />بقي ان اوضح نقطة أخيرة – وهي لمعلوماتك فقط ! &#8211; ان هذه الثلاثة اقسام موجوده كلها في ملف واحد وهو ملف Model.edmx الخاص بالـ EDM الذي تعمل عليه ، الا ان الحقيقة انه وفي وقت الترجمة Compiling ، يتم انشاء ثلاثة ملفات ، كل ملف لجزء من الثلاثة ، حيث يوجد ملف للنموذج المفهومي conceptual model يحمل اللاحقة csdl ، وهناك ملف لل Storage Layer يحمل اللاحقة ssdl ، بينما ملف ثالث يحمل اللاحقة msl يمثل جزء الخريطة Mapping . </p>
<p>وهناك ايضا نقطة اخرى ، يحث يحتوي على الملف Model.edmx على منطقة محرمة للتعديل اليدوي من قبل المبرمجين ، تختص بمعلومات حول موقع كل Entity وعرض صندوقها وغيرها من الامور التي يحتاجها الـ Designer في عرض النموذج امامك !</p>
Posted in ado.net entity framework Tagged: ado.net entity framework; كتاب <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/alnabhani.wordpress.com/149/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/alnabhani.wordpress.com/149/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/alnabhani.wordpress.com/149/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/alnabhani.wordpress.com/149/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/alnabhani.wordpress.com/149/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/alnabhani.wordpress.com/149/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/alnabhani.wordpress.com/149/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/alnabhani.wordpress.com/149/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/alnabhani.wordpress.com/149/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/alnabhani.wordpress.com/149/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=alnabhani.wordpress.com&blog=454111&post=149&subd=alnabhani&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://alnabhani.wordpress.com/2009/12/14/%d8%a7%d9%84%d8%a8%d8%a7%d8%a8-%d8%a7%d9%84%d8%ab%d8%a7%d9%86%d9%8a-%d8%a7%d8%b3%d8%aa%d9%83%d8%b4%d8%a7%d9%81-%d9%86%d9%85%d9%88%d8%b0%d8%ac-%d9%83%d9%8a%d8%a7%d9%86%d8%a7%d8%aa-%d8%a7%d9%84%d8%a8/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="" medium="image">
			<media:title type="html">alnabhani</media:title>
		</media:content>

		<media:content url="http://www.vb4arab.com/vb/uploaded/486/01260709873.png" medium="image" />

		<media:content url="http://www.vb4arab.com/vb/uploaded/486/11260709873.png" medium="image" />

		<media:content url="http://www.vb4arab.com/vb/uploaded/486/21260709873.png" medium="image" />

		<media:content url="http://www.vb4arab.com/vb/uploaded/486/31260709873.png" medium="image" />

		<media:content url="http://www.vb4arab.com/vb/uploaded/486/41260709873.png" medium="image" />

		<media:content url="http://www.vb4arab.com/vb/uploaded/486/51260709873.png" medium="image" />

		<media:content url="http://www.vb4arab.com/vb/uploaded/486/01260710154.png" medium="image" />

		<media:content url="http://www.vb4arab.com/vb/uploaded/486/11260710154.png" medium="image" />

		<media:content url="http://www.vb4arab.com/vb/uploaded/486/21260710154.png" medium="image" />

		<media:content url="http://www.vb4arab.com/vb/uploaded/486/31260710154.png" medium="image" />

		<media:content url="http://www.vb4arab.com/vb/uploaded/486/41260710154.png" medium="image" />

		<media:content url="http://www.vb4arab.com/vb/uploaded/486/51260710154.png" medium="image" />

		<media:content url="http://www.vb4arab.com/vb/uploaded/486/01260710533.png" medium="image" />
	</item>
		<item>
		<title>الباب الاول: مقدمة عن اطار عمل كتل البيانات Entity Framework</title>
		<link>http://alnabhani.wordpress.com/2009/11/28/%d8%a7%d9%84%d8%a8%d8%a7%d8%a8-%d8%a7%d9%84%d8%a7%d9%88%d9%84-%d9%85%d9%82%d8%af%d9%85%d8%a9-%d8%b9%d9%86-%d8%a7%d8%b7%d8%a7%d8%b1-%d8%b9%d9%85%d9%84-%d9%83%d8%aa%d9%84-%d8%a7%d9%84%d8%a8%d9%8a%d8%a7/</link>
		<comments>http://alnabhani.wordpress.com/2009/11/28/%d8%a7%d9%84%d8%a8%d8%a7%d8%a8-%d8%a7%d9%84%d8%a7%d9%88%d9%84-%d9%85%d9%82%d8%af%d9%85%d8%a9-%d8%b9%d9%86-%d8%a7%d8%b7%d8%a7%d8%b1-%d8%b9%d9%85%d9%84-%d9%83%d8%aa%d9%84-%d8%a7%d9%84%d8%a8%d9%8a%d8%a7/#comments</comments>
		<pubDate>Sat, 28 Nov 2009 17:05:07 +0000</pubDate>
		<dc:creator>alnabhani</dc:creator>
				<category><![CDATA[ado.net entity framework]]></category>
		<category><![CDATA[entity framework; book]]></category>

		<guid isPermaLink="false">http://alnabhani.wordpress.com/2009/11/28/%d8%a7%d9%84%d8%a8%d8%a7%d8%a8-%d8%a7%d9%84%d8%a7%d9%88%d9%84-%d9%85%d9%82%d8%af%d9%85%d8%a9-%d8%b9%d9%86-%d8%a7%d8%b7%d8%a7%d8%b1-%d8%b9%d9%85%d9%84-%d9%83%d8%aa%d9%84-%d8%a7%d9%84%d8%a8%d9%8a%d8%a7/</guid>
		<description><![CDATA[1 – ما هو اطار عمل كتل البيانات Entity Framework ؟
اطار عمل كتل البيانات Entity Framework هو اطار عمل لتمثيل البيانات على شكل كائنات مرتبطة في .Net Framework . يتمتع اطار العمل هذا بكونه جزءا لا يتجزأ من ADO.NET كتقنية من التقنيات المضمنة بها انطلاقا من الاصدار 3.5 SP1 . وبالتالي فهذه التقنية تعتبر اختا [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=alnabhani.wordpress.com&blog=454111&post=148&subd=alnabhani&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>1 – ما هو اطار عمل كتل البيانات Entity Framework ؟</p>
<p>اطار عمل كتل البيانات Entity Framework هو اطار عمل لتمثيل البيانات على شكل كائنات مرتبطة في .Net Framework . يتمتع اطار العمل هذا بكونه جزءا لا يتجزأ من ADO.NET كتقنية من التقنيات المضمنة بها انطلاقا من الاصدار 3.5 SP1 . وبالتالي فهذه التقنية تعتبر اختا لباقي التقنيات كال Dataset,LINQ to SQL وغيرها ، والآن اصبح لدينا مرونة كافيه للقيام في بناء التطبيقات المعتمدة على قواعد البيانات .</p>
<p>تقنية الـ Entity Framework تقوم بتغليف جداول قاعدة البيانات بفئات تتضمن طرق وخصائص تمثل كائنات قاعدة البيانات ، بمعنى لو كان لديك جدول بالإسم Persons وبه حقول كـ PersonID,FirstName,LastName,…etc فإن هذه التقنية ستقوم بتوليد فئة Class بالإسم Persons به حقول بنفس اسم حقول الجدول Persons في قاعدة البيانات ، بإختصار ، تقوم هذه التقنية بإنشاء نموذج Model لكائنات قاعدة البيانات ، موفرة عليك بذلك الكثير من الجهد خصوصا عندما نتكلم عن تطبيقات متعددة الطبقات N-Tier Applications .</p>
<p> <span id="more-148"></span>
<p>من ميزات هذه التقنية ، هو ان نموذج البيانات Data Model الموجود لديك ، لا يشترط ان يكون مطابقاَ لما هو موجود في قاعدة البيانات ، بمعنى اخر ، بإمكانك تخصيص شكل نموذج البيانات ليكون مختلفا عما هو في قاعدة البيانات ، يتحدد هذا على الطريقة التي استخدمتها في تخطيط قاعدة بياناتك وتوزيع الجداول والحقول فيها ، ستتضح الصورة من هذا لاحقا إن شاء الله .</p>
<p>وبالنسبة للعلاقات بين الجداول ، فهناك ما يدعى بالـ NavigationProperties ، وهي تمثيل للجدول المرتبط بالجدول الحالي ، فلو كان لدينا جدول اب به حقل مرتبط بالجدول الابن ، فإن الحقل الموجود في الجدول الاب لن يظهر بل سيظهر بدل عنه مباشرة خاصية ابحار NavigationProperty للوصول إلى البيانات المرتبطه ، هذا الامر سيتضح اكثر باخذ مثال فلا تقلق نفسك كثيرا .</p>
<p>ميزة اخرى في هذه التقنية ، لو أنك قد استخدمت LINQtoSQL لكنت قد اعجبت بالـ O/R Designer وكيف يحول الجداول والـ Stored Procedures الخاصة بقاعدة بيانات من نوع SQL Server مباشرة إلى كائنات برمجية : فئات وطرق Classes,Methods &#8230; الخ ويصبح بإمكانك استخدام LINQ مباشرة في الاستعلام عن البيانات وتعديلها واضافتها وحذفها ،، فإنني متأكد من اغرامك بها ولحسن الحظ فيوجد لدينا ايضا ما يدعى بالـ ADO.NET Entity Model ليحاكي الجداول ويقوم بتوليد كل شيء نيابه عنك .</p>
<p>وفي الحقيقة يعتبر اطار عمل كتل البيانات Entity Framework احد التقنيات التي تبنيها مايكروسوفت في سبيل جعل تطوير وبناء انظمة الأعمال business Systems بشكل سهل وميسر . فبدلا من الاعتماد على كائنات DataReaders مباشرة في جلب البيانات وقراءتها والتعقيدات الناتجة عن هذا الامر ، فلماذا لا يكون هذا الكائن هو البنية التحتية فقط ، بمعنى ان نقوم ببناء فئات يستخدمها المبرمجون بطريقة محاكية للجداول ، فالجدول Customers يكون هناك قائمة List(Of Customer) من الفئة Customer وبالتالي سيكون الامر عليك ايها المبرمج امرا اسهل ؟ </p>
<p>من ناحية السهولة ، سيكون افضل بكثير من الاعتماد على الـ DataReader مباشرة ، ولكننا نتكلم عن المزيد من السهولة ، فانت ستحتاج إلى التعرف على التعديلات التي طرات على البيانات ، وحفظها ، والتعرف على السجلات المحذوفة ، وغيرها من هذه الاجراءات المعتادة في هكذا نوع من التطبيقات ، وبالتالي فستحتاج إلى كتابة المزيد من الاكواد والابتعاد عن المهمة الاساسية في تطوير وبناء تطبيقك !</p>
<p>من هنا ستنسى شيء اسمه عمود او حقل Column او سجل Row وسيكون عليك الاهتمام فقط بـفئات Classes و خصائص Properties . لذلك كله ، يأتي لنا اطار العمل Entity Framework ليسهل لنا كل هذا الامر ، فهو يسهل علينا تمثيل البيانات على شكل فئات وكائنات برمجية مباشرة ، نتحكم بها من خلال الفاضلة لغة البرمجة المحببة إلى قلوبنا ، ويقدم لنا سهوله شديدة في الاستعلام باستخدام ثلاث طرق مختلفة سنتعرف عليها لاحقا، كما يسهل لنا التعرف على التغييرات Changes Tracking ، ويدعم التسلسل Serialization ، الامر الذي يساعدنا كثيرا في تطوير التطبيقات مهما كبر حجمها ، مع استهلاك اقل وقت في التطوير .</p>
<p>ويستخدم اطار كتل البيانات ، ما يعرف بكيان نموذج البيانات Entity Data Model ، وهو نموذج مطور من ما يعرف بالـ Entity Relationship Modeling, ERM وهو مفهوم ظهر في تطوير قواعد البيانات منذ سبعينيات القرن الماضي .</p>
<p>2- نظرة تاريخية في تقنيات الاتصال :</p>
<p>قبل حوالي احد عشر عاما من الان ، أي في حوالي 1998 م ، كان صدور الاصدار السادس والاخير من لغة فيجوال بيسك 6 متضمنا ثلاث تقنيات اساسية وهي DAO,RDO,ADO – وللأسف فهناك من يستخدم DAO اليوم ! – كانت تقنية ADO هي الاحدث يومها وكانت تضم اداءا افضل وكائنات اذكى وافضل من DAO,RDO ، وكعادة مايكروسوفت ، جاءت تقنيات الدوت نت لتحمل معها مكتبة وحيدة وهي ADO.NET للتعامل مع قواعد البيانات وتضمنت وضعي اتصال : الوضع المتصل Connected Mode والوضع المنفصل Disconnected Mode ، وكان المبرمجون اما خيارين فقط : اما استخدام تقنيات الوضع المتصل المتمثلة في كائنات مثل DataReader و Command ، او استخدام الوضع المنفصل والمتمثل في كائني الـ Dataset والـ TableAdapter . الخيارات محدودة في الاتصال ، والتقنيات قليلة ، فإذا كنت ترغب بعمل استعلام ، فكنت ستحتاج إلى كتابة جمل استعلام SQL تقليدية سواء في باني الاستعلامات Query Builder او في كائن Command وغيرها من الاماكن المعروفة لدى المبرمجين المخضرمين ، ومن المشاكل التي واجهت المبرمجين حينها ، كثرة الاقواس وعبارات الدمج النصي عبارات الاستعلام حيث انها تعتبر متغيرات من النوع String يتم ارسالها إلى مزود قاعدة البيانات لا اكثر ولا اقل ، وكذلك كان لزاما علينا استخدام الباراميترات Parameters لتمرير البيانات بشكل آمن وللهروب من حقن البيانات SQL Injection .</p>
<p>مع ذلك ، كل تلك التقنيات لم تكن ترتقي إلى المستوى المطلوب في التطبيقات التجارية ، فعملية كتابة تطبيقات متعددة الطبقات n-tier applications كانت تحتاج إلى جهود كبيرة ووقت كبير نسبيا – مقارنة باليوم ! – وعمليات الاستعلام في البيانات كانت معقدة شيئا ما ، ظهر بعدها امكانية تقسيم ملفات الـ Dataset لتصبح منفصلة عن بعضها في مشاريع مختلفة الامر الذي رفع مستوى الانتاجية في تطوير التطبيقات متعددة الطبقات ، الا ان صدور النسخه الثالثة من اطار العمل .net framework والنسخة التاسعة من فيجوال بيسك والثالثة من سي شارب ، كانت هي المطور الاساسي لهذه العملية ، فظهور الاستعلامات المتكاملة باللغة Language Integrated Query ادى إلى ثورة حقيقية في مجال الاستعلام عن البيانات من داخل التطبيق ، كما ان المزودات الاخرى كـ LINQtoSQL و LINQtoDataset و LINQtoXML ادى إلى تسهيل التعامل بشكل بالغ مع قواعد البيانات وخصوصا الجزء الاستعلامي منها ، فاصبح بإمكاننا التخلي عن استخدام حلقات For Each التكرارية المملة ، وصار الاستعلام ممتعا ولم تصبح عملية تذكر اسماء الحقول او الاخطاء الاملائية فيها عملية شاقة ابدا بعد اليوم بفضل خاصية IntelliSence في Visual Studio .</p>
<p>تقنيات كـ LINQtoSQL اخذت تشق طريقها بقوة في التطبيقات التجارية والتطبيقات المتوسطة والكبيرة ، واخذت تسهل الامور كثيرا ، خصوصا انها كانت مدعومة بشكل فعال من تقنية LINQ فالاستعلام كما قلنا صار جزءا من اللغة .</p>
<p>وعلى الرغم من كل هذه التغييرات والتطورات التقنية ، الا ان الامر لم يقف عند هذا الحد ، فصدور اطار عمل كتل البيانات Entity Framework لاحقا كجزء من تقنية ADO.NET اثار جدلا واسعا ، فقد امكن العمل بشكل مدمج اكثر ، ولم يصبح تركيز المبرمج الا على اكواده وبرامجه فقط ، فهو لا يرى قاعدة البيانات على الاطلاق ، والاستعلام لم يعد حكرا لا على جمل T-SQL و لا على تقنية LINQ بل ظهرت طرق اخرى ايضا يتناولها هذا الكتاب بالتفصيل ان شاء الله .</p>
<p>وفي لحظة كتابة هذه السطور ، لا يزال الاصدار الرابع من Entity Framework تحت التجريب ، الا انه يحل مشاكل كثيرة تتعلق بالاداء ، وتحسين العمل ، فضلا عن تغيير في المفهوم ، فأصبح توليد قاعدة البيانات من خلال الكائنات امرا سهلا !</p>
<p>ولكن هل هذا هو نهاية المطاف ؟</p>
<p>لا يا اعزائي ، فعملية تطوير التقنيات امر انفردت به مايكروسوفت ، ويجب عليك اللهث ورائها جيدا ، فصحيح انها تطلق كل يوم – مجازا – تقنية جديدة ، الا ان هذه التقنيات ، تحل مشاكل كثيرة وتسهل العمل بشكل فعال ويصبح عمل التطبيقات مهما كبر حجمها في زمن قياسي امرا ايسر شيئا فشيئا. </p>
<p>3- تعددت التقنيات ، فأيها اختار ؟</p>
<p>في الحقيقة هذا السؤال سؤال وجيه جدا ، ولا يخرج الا من مبرمج يسعى لتطوير نفسه ، فليس مجرد صدور تقنية يعني ان نستخدمها في تطبيقاتنا ، وايضا لا يعني هذا الامر ان نكتفي بتعلم تقنية واحدة ونهمل التقنيات الاخرى كلها دون ان نعلم الهدف من كل تقنية والايجابيات والسلبيات التي تكمن في كل منها .</p>
<p>في الحقيقة ، يوجد حاليا ثلاث تقنيات رئيسية للاتصال بالبيانات والتعامل معها وهي : Dataset,LINQtoSQL,Entity Framework وسنحاول هنا التعرف على زيد وعبيد ، وهل خلفان هو الانسب لمشروعي ام سليمان ؟</p>
<p>سنسهل القضية يا جماعة بمقارنة Dataset و LINQtoSQL اولا ، حسنا العملية تعتمد على السيناريوهات الموجودة لديك :</p>
<p>بالنسبة للـ Dataset :</p>
<p>- الـ Dataset سهل التعريف ، والتسلسل Serialize ، ويسهل فصل الكود فيها عن تصميمه في المشاريع المتعددة الطبقات خصوصا بما يتعلق بالـ TableAdapter المضمنه فيه .</p>
<p>- الـ Dataset يحتوي على متتبع للتغيرات التي تطرأ على البيانات المضمنه فيه، ويدعم التغيير دفعه واحده Batch Editing وكذا بالنسبة للتصفيه والعرض ، كما انه يتعامل بشكل تلقائي مع العلاقات المركبة Complex Relationships .</p>
<p>- يسهل استخدام Dataset عندما نرغب في عمل ربط بيانات DataBinding بشكل متقدم ومعقد .</p>
<p>- يصعب استخدام Dataset عندما نرغب بعمل بعمل عمليات تحقق متقدمة على البيانات .</p>
<p>- يجب تجنب استخدام Dataset عندما تقوم ببناء تطبيق موزع ليس كل العملاء Clients فيه مبنية على net. </p>
<p>بالنسبة لـ LINQtoSQL :</p>
<p>- يقدم لك LINQtoSQL دعم تحكم كامل بالتحقق Validation, السلوك Behavior ، منطق الأعمال BusinessLogic ، كما انها سهله التوريث للفئات الاخرى ، هذا يعني امكانيه عمل طبقات ام وطبقات مشتقة للاعمال بكل سهولة .</p>
<p>- يمكن عمل تسلسل Serialization لفئات LINQtoSQL على شكل مصفوفات Arrays لغير عملاء net. </p>
<p>- بمجرد ايقاف الاتصال بين LINQtoSQL والـ DataContext ، تكون عملية ال Databinding وتعقب التغييرات على البيانات عملية صعبة ويجب عليك القيام بكل ذلك بنفسك !</p>
<p>وعلينا ايضا ملاحظة ان تقنية LINQtoSQL محصورة على SQL Server فقط .</p>
<p>وبالنسبة لـ Entity Framework فتتميز عن LINQtoSQL بالأمور التالية :</p>
<p>- ليس واجبا عليك مطابقة نفس النموذج في قاعدة البيانات ، مثلا يمكنك ان تدمج الجداول المرتبطة بعلاقة واحد لواحد One-to-One في فئة واحدة بكل سهولة فلا حاجه لأن تكون لديك فئتين واحدة لكل جدول ، بعكس LINQtoSQL حيث يجب انشاء فئة منفصلة لكل جدول .</p>
<p>- بإمكانك التعامل مع والتحكم بـأنواع مختلفة من وراثة البيانات .</p>
<p>- التعامل المباشر مع العلاقات من نوع متعدد لمتعدد Many-to-Many .</p>
<p>- قابلية استخدام مصادر بيانات دون قواعد البيانات كـ Reporting Services وغيرها.</p>
<p>- قابلية التعامل مع انواع قواعد بيانات دون الاكتفاء بـ SQL Server.</p>
<p>ومثل كل تلك الايجابيات فهناك السلبيات ، فلا يوجد شيء او احد كامل هنا ابدا ؛ فهناك بطء نسبي في التعامل مع البيانات مقارنة بـ LinqToSQL ، فضلا عن التعقيد النسبي والذي سيتلاشى مستقبلا كما تخطط مايكروسوفت ، حيث ان من المخطط ان يوقف تطوير LINQtoSQL في الاصدارات القادمة وتكون Entity Framework هي السبيل الأمثل والأساسي والافتراضي – اذا عندك كلمة اخرى مناسبة اضفها مع الكلمات الثلاثة السابقة ! – لبرمجة تطبيقات تعتمد على قواعد البيانات .</p>
<p>خلاصة الامر ، اذا كان تطبيقك من النوع الصغير نسبيا ومعتمدا على SQL Server وحدة دون غيره ، ولا تحتاج إلى أي من مواصفات المرونة Flexibility التي يتمتع بها Entity Framework فيكفيك LINQtoSQL وحده .</p>
<p>&#160;</p>
<p>4- سمات اطار عمل كيان البيانات Entity Framework :</p>
<p>يتمتع اطار العمل entity Framework بدعم واسع من الادوات والكائنات معا ، فهو يتسم بدعمه بالمميزات التالية :</p>
<p>- نموذج كتل البيانات Entity Data Model</p>
<p>- ادوات تصميم كتل البيانات entity Data Model Design Tools</p>
<p>- ادارة الكائنات بواسطة خدمات الكائنات Objects Services</p>
<p>- تتبع التغييرات Change Tracking</p>
<p>- ادارة العلاقات Relationship Management</p>
<p>- ربط البيانات Data Binding</p>
<p>- عميل الكيان Entity Client</p>
<p>وسنتحدث عنها واحدا واحدا ، فهي تقف في صف واحد بإحترام – هذه مزحة ! :</p>
<p>نموذج كتل البيانات Entity Data Model :</p>
<p>ما هو نموذج كتل البيانات Entity Data Model ؟ هو عبارة عن توصيف لتعريف البيانات المبنية في entity framework . وبدون الـ EDM ، لا توجد علاقات Relationships ولا حتى كتل بيانية entities في مخطط التصميم لديك Design Schema ، اما ما هو مخطط التصميم Design Schema فهو يستخدم لبناء الفئات Classes التي تجدها امامك بدلا من مناداة الجداول مباشرة في قاعدة البيانات . هناك المزيد من الامور لكن افضل التعرف عليها لاحقا في حينها .</p>
<p>وبالرغم من ان اطار العمل مصمم لكي يسمح للمبرمج بالعمل مباشرة بالفئات الموجود في نموذج كتل البيانات Entity Data Model ، الا ان نموذج كتل البيانات EDM لا يتمثل شيء ذا قيمة بدون التعامل مع قاعدة البيانات الحقيقية . وفي الحقيقة ان النموذج الذي تراه في EDM ما هو الا تعليمات XML تصف مكونات الـنموذج Model وخصائصه ( الجداول وحقولها المضمنه ، والطرق وغيرها ) . ملف أخر يقوم بعملية التوجيه Mapping ليربط الكائنات بمقابلاتها في قاعدة البيانات .</p>
<p>وخلال عملية تنفيذ استعلام Query او امر Command ، سيقوم اطار العمل entity Framework بترجمة الاستعلامات المنفذة على كائنات وفئات Objects and Classes إلى استعلامات واوامر مناسبة لقاعدة البيانات.</p>
<p>- ادوات تصميم كتل البيانات entity Data Model Design Tools</p>
<p>وكعادة التقنيات القادمة من مايكروسوفت ، فلكل واحدة منها مائة اداة وأداة تجعل العمل يسيرا ، فلن تقوم بكتابة كود لا يخصك بل سيقوم الجماعة – واقصد الادوات ! – بكتابة الاكواد اللازمة لتوصيف الجداول على شكل entities وغيرها من الكائنات. يقدم لنا Visual Studio مجموعة ادوات مرئية Visual Tools تمكنك من العمل بشكل مرئي مريح وسهل ، فلا اعتقد انك ترغب بكتابة نموذج Model لعشرة جداول بينها علاقات وبكل واحد ما متوسطه 5 او 6 حقول فتخيل ان تكتب كل ذلك بهيئة XML بنفسك ! لا اعتقد ان هناك من يحب ان يقوم بكل ذلك بنفسه !</p>
<p>لسوء الحظ ، فإن المصمم Designer يحتوي على قصور ، يتمثل في كونه لا يدعم كل ميزات وخصائص الـ EDM &quot;كبن&quot; ، ولكن لا تقلق فتلك المميزات هي نادرة الاستخدام ، وستتعرف عليها مستقبلا ان شاء الله ، لكن حينها لا تنفع لومة لائم ، حيث انه سيتوجب عليك فتح الـ Model كملف XML والاضافة والتعديل عليه بنفسك ، لذلك فأحسب حسابك من الآن ، لو أردت التعمق كثيرا فعليك الالمام بـ XML .</p>
<p>من الاشياء الجميلة في الـ Designer هو دعمه للتعرف والتعامل مع الاجراءات المخزنة Stored Procedures ، ولكن ايضا وللأسف – مجددا وكالعادة في كل مرة ! – يوجد حدود وقصور وستحتاج في بعض الاحيان إلى التعديل في ملف الـ XML ايضا !</p>
<p>شيء اجمل من سابقه ودون قصور هذه المرة ! هو دعم تحديث النموذج Model من قاعدة البيانات ، ففي حالة نسيانك اضافة أي جدول ، حقل ، اجراء مخزن .. الخ ، يمكنك استخدام وظيفة التحديث لإعادة اضافة الكائنات مجددا .</p>
<p>واحدة من اقوى الميزات المنتظره في الاصدار الرابع القادم مع فيجوال ستوديو 2010 هي امكانية تحويل النموذج الغير مربوط بقاعدة بيانات إلى قاعدة بيانات جديدة ، فيمكنك استخدامه لانشاء قاعدة بيانات بكائناتها المختلفة .</p>
<p>- ادارة الكائنات بواسطة خدمات الكائنات Objects Services</p>
<p>هل رأيت كيف يكون الشيخ في مجلس قبيلته متوسطا وظاهرا ومتقدما عليهم جميعا ؟ فتلك هي ادارة الكائنات بواسطة خدمات الكائنات Objects Services ميزة اساسية تحتل مرتبة متقدمة جدا في قلب Entity Framework ، وتعرف كثيرا باسم خدمات الكائنات Objects Services . في السطور الماضية قد يظن البعض انني بالغت قليلا في كلامي ووصفي لمكانة خدمات الكائنات Objects Services ولكن الحقيقة فيما اقول تظهر في الشكل التالي والذي يمثل بنية Entity Framework :</p>
<p>&#160;</p>
<p><img src="http://www.vb4arab.com/vb/uploaded/486/01259423670.gif" width="507" height="421" /> </p>
<p>فهو يتقدم الجميع في اطار العمل من حيث الاستخدام ، وهو المسؤول عن توفير كل الوظائف المطلوبة للعمل بالكائنات Objects المبنية على الكيانات الموجودة entities . تقدم خدمات الكائنات فئة تدعى EntityObject ، اهمية هذا الامر هي في ان خدمات الكائنات تدير مجموعة كائنات من ترث الفئة EntityObject ، المزيد من المعلومات في الطريق ! فعملية الادارة ليست بتلك الهينة ، حيث يتم تكوين الكائنات Materializing Objects بناءا على نتائج الاستعلامات ، ويبقي على تتبع للتغيرات التي تطرأ على البيانات – عفوا قصدي الكائنات ! ، كما يقوم بإدارة العلاقات Relationships بين الكائنات ويقوم اخيرا بحفظ التغييرات وارسالها إلى قاعدة البيانات .</p>
<p>وبين عملية الاستعلام عن البيانات وتحديث تلك الموجودة ، تقدم خدمات الكائنات استضافة لمجموعة من القدرات الخاصة بالتعامل مع كائنات الكتل Entity Objects كالنزول إلى ادنى المستويات في اطار العمل نيابة عنك يا سيدي العقيد ، والتي تتمثل في التعامل مع قاعدة الجنود – عفوا قصدي البيانات ! وتتعامل مع نتائج الاستعلامات بنفسها ، كل هذا بدلا عنك . بقي ان نذكر ان خدمات الكائنات تقدم شيئا آخر وهو دعم التسلسل Serialization للكائنات بنسقين ثنائي Binary و XML الامر الذي يجعلك تأخذ بالمثل القائل : حط في كرشك جحه !</p>
<p>افلا نقول لها كلمة : شكرا على كل هذه الجهود ؟</p>
<p>- تتبع التغييرات Change Tracking</p>
<p>مجرد القيام بالاستعلام عن البيانات والتعديل عليها لا يكفي يا حبيبي ، فكيف ستعرف السجلات المضافة والمعدلة والمحذوفة حتى تقوم بتحديث قاعدة البيانات ؟ بدلا من ان تكتب عشرات الاسطر البرمجية في سبيل تعقب تلك التغييرات ، وتظهر لديك مئات الشوائب البرمجية جراء ذلك لكل كائن تقوم باستخدامه ، يقدم لك اطار العمل entity Framework هذه الميزة نيابة عنك فأرح نفسك من كل هذا التعب والتفكير في هذا الموضوع وركز على مشروعك اكرم لك !</p>
<p>فبمجرد انشاء أي كائن كيان entity او الحصول على قيم استعلام ، يتم تتبع كل التغييرات التي تنشأ عليها ، ويتم كذلك تجهيز جمل Insert,Update,Delete خاصة بها في قاعدة البيانات ! فضلا عن هذا كله ، توفر لك دعم محترم للتعامل مع الاجراءات المخزنة التي تقوم بهذه العمليات .</p>
<p>- ادارة العلاقات Relationship Management</p>
<p>فلنكن صريحين ، كل قواعد البيانات اليوم تعتمد على العلاقات ، وقواعد البيانات العلائقية منذ ظهورها في منتصف القرن الماضي وهي تعتبر الوسيلة الجبارة في اختزال كمية كبيرة من البيانات التي لا داعي لها ابدا . وبما اننا نستخدم بناء مفهومي conceptual Building ، ونقوم بعمل كائنات مرتبطة ، هذه الكائنات ما هي في الاساس الا تمثيل لجداول قاعدة البيانات ، فإذا من الطبيعي ان نتعامل مع العلاقات فيما بين الجداول ايضا على شكل علاقات بين الكائنات ، فالعلاقات تعتبر جزء هام وحساس جدا في EDM وحقيقتها هي انها عبارة عن كائنات لا اكثر ولا اقل . </p>
<p>- ربط البيانات Data Binding</p>
<p>تعد خاصية ربط الادوات بالبيانات Data binding من اهم الخصائص التي تميز اطار العمل .Net Framework و Visual Studio ، وبالطبع فإطار العمل Entity Framework يقدم لك دعما محترما بهذا الخصوص ، فيمكنك استخدام الكتل البيانيه Entities كمصدر بيانات في أي مكون كـ BindingSourc eاو حتى مباشرة في الادوات مثله مثل أي مصدر بيانات اخر . </p>
<p>ولا ننسى ان لمطوري ويب دعم كبير ايضا، فهناك اداة كاملة تدعى EntityDataSource والتي تعد مشابهه للاداتين SqlDataSource و LinqDataSource .</p>
<p>- عميل الكيان Entity Client</p>
<p>يعد عميل الكيان من اهم واجهات برمجة التطبيقات API’s المقدمة في اطار العمل Entity Framework ، فهو من اساسات الـ Entity Framework ، فإن كانت خدمات الكائنات Objects Services كشيخ في قبيلته ، فإن عميل الكيان Entitiy Client يعد والي السلطان ، او عامل الخليفة Entity Framework عليهم كلهم ، فهو المسؤول عن التعامل مع استعلامات المخزن Store Quries ، والأوامر commands من اجل الاتصال بقاعدة البيانات ، تنفيذ الأوامر ، احضار النتائج ، وتغليفها بمظهر الكائنات الموافق للـ EDM .</p>
<p>وفي الواقع ، يمكنك التعامل مع الـ EntityClient مباشرة او إدارته من خلال كائن خدمات البيانات Object Services . وبدون لف او دوران ، اخبرك بان عميل الكيان EntityClient يقوم بتنفيذ اوامر السلطان او الخليفة بدعم من الشيخ Object Services فقط ، فبدونه لن يتمكن عميل الكيان من القيام بأي شيء على الاطلاق . </p>
<p>ملخص الأمر ، ان عميل الكيان EntitiyClient يعود بالبيانات بشكل جدولي Tabular وتكون قابلة للقراءة فقط ، بينما تقوم خدمات الكائنات ObjectServices بتغليف البيانات الجدولية بـكائنات Objects مطابقة للـ EDM ويقدم الدعم لعملية تعقب التغييرات التي تطرأ على البيانات وكذلك يقدم امكانية حفظ تلك التغييرات إلى قاعدة البيانات .</p>
<p>5- الاختلاف في الاصدارات :</p>
<p>هناك اختلافات كثيرة قادمة مع الاصدار الثاني – او الرابع ! – لكن على كل حال تلك النسخه لا تزال تجريبية ، وحتى تصدر ، علينا بالموجود ، لذلك افضل لك ان تتقن Entity Framework v1 وعندما يصدر الاصدار التالي مع النسخه 4 من .Net Framework سيكون معرفة التطورات الجديدة امر اسهل من ذي قبل .</p>
<p>6- أمثلة هذا الكتاب : </p>
<p>اود اخبارك بأنني ساستخدم قاعدة بيانات من نوع SQL Server في الاكواد والامثلة الموجودة ، وهي قاعدة البيانات الشهيرة Northwind ، فأحرص على اقتنائها ان لم تكن لديك نسخه منها من الرابط التالي حتى تستطيع التجريب والتطبيق مع الكتاب :</p>
<p><a href="http://www.microsoft.com/Downloads/details.aspx?FamilyID=06616212-0356-46a0-8da2-eebc53a68034&amp;displaylang=en">http://www.microsoft.com/Downloads/details.aspx?FamilyID=06616212-0356-46a0-8da2-eebc53a68034&amp;displaylang=en</a></p>
Posted in ado.net entity framework Tagged: entity framework; book <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/alnabhani.wordpress.com/148/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/alnabhani.wordpress.com/148/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/alnabhani.wordpress.com/148/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/alnabhani.wordpress.com/148/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/alnabhani.wordpress.com/148/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/alnabhani.wordpress.com/148/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/alnabhani.wordpress.com/148/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/alnabhani.wordpress.com/148/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/alnabhani.wordpress.com/148/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/alnabhani.wordpress.com/148/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=alnabhani.wordpress.com&blog=454111&post=148&subd=alnabhani&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://alnabhani.wordpress.com/2009/11/28/%d8%a7%d9%84%d8%a8%d8%a7%d8%a8-%d8%a7%d9%84%d8%a7%d9%88%d9%84-%d9%85%d9%82%d8%af%d9%85%d8%a9-%d8%b9%d9%86-%d8%a7%d8%b7%d8%a7%d8%b1-%d8%b9%d9%85%d9%84-%d9%83%d8%aa%d9%84-%d8%a7%d9%84%d8%a8%d9%8a%d8%a7/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
	
		<media:content url="" medium="image">
			<media:title type="html">alnabhani</media:title>
		</media:content>

		<media:content url="http://www.vb4arab.com/vb/uploaded/486/01259423670.gif" medium="image" />
	</item>
		<item>
		<title>حلق بعيداً مع إطار العمل ADO.NET Entity Framework</title>
		<link>http://alnabhani.wordpress.com/2009/11/28/%d8%ad%d9%84%d9%82-%d8%a8%d8%b9%d9%8a%d8%af-%d9%85%d8%b9-%d8%a5%d8%b7%d8%a7%d8%b1-%d8%a7%d9%84%d8%b9%d9%85%d9%84-ado-net-entity-framework/</link>
		<comments>http://alnabhani.wordpress.com/2009/11/28/%d8%ad%d9%84%d9%82-%d8%a8%d8%b9%d9%8a%d8%af-%d9%85%d8%b9-%d8%a5%d8%b7%d8%a7%d8%b1-%d8%a7%d9%84%d8%b9%d9%85%d9%84-ado-net-entity-framework/#comments</comments>
		<pubDate>Sat, 28 Nov 2009 17:01:49 +0000</pubDate>
		<dc:creator>alnabhani</dc:creator>
				<category><![CDATA[ado.net entity framework]]></category>

		<guid isPermaLink="false">http://alnabhani.wordpress.com/2009/11/28/%d8%ad%d9%84%d9%82-%d8%a8%d8%b9%d9%8a%d8%af-%d9%85%d8%b9-%d8%a5%d8%b7%d8%a7%d8%b1-%d8%a7%d9%84%d8%b9%d9%85%d9%84-ado-net-entity-framework/</guid>
		<description><![CDATA[هدية عيد الفطر أبدأ في تسليمها لكم في عيد الأضحى المبارك – يالكسلي ! اعتقد انني لا استحق ما انجزته ! اعلم انني تاخرت كثيرا في طرح هذه السلسلة المتكاملة والسبب في ذلك الضغط الدراسي الذي اعيشه والذي يحرمني حتى من مجرد الاطلاع على آخر التطورات !
&#160;
في هذه السلسلة &#8211; والتي اسأل الله ان اوفق [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=alnabhani.wordpress.com&blog=454111&post=146&subd=alnabhani&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>هدية عيد الفطر أبدأ في تسليمها لكم في عيد الأضحى المبارك – يالكسلي ! اعتقد انني لا استحق ما انجزته ! اعلم انني تاخرت كثيرا في طرح هذه السلسلة المتكاملة والسبب في ذلك الضغط الدراسي الذي اعيشه والذي يحرمني حتى من مجرد الاطلاع على آخر التطورات !</p>
<p>&#160;</p>
<p>في هذه السلسلة &#8211; والتي اسأل الله ان اوفق في نشرها كاملة وضمها في كتيب متكامل بإذنه تعالى ، لتكون المرجع العربي الأول في هذا المجال – سأتناول اطار العمل ADO.NET Entity Framework في اصداره الأول – المضمن مع الاصدار 3.5 SP1 من اطار العمل .Net Framework ، <a href="http://alnabhani.wordpress.com/2009/07/22/%d9%87%d9%84-%d8%aa%d8%b9%d9%84%d9%85-%d9%85%d8%a7-%d9%87%d9%88-%d8%a7%d8%b7%d8%a7%d8%b1-%d8%b9%d9%85%d9%84-%d9%83%d9%8a%d8%a7%d9%86-%d8%a7%d9%84%d8%a8%d9%8a%d8%a7%d9%86%d8%a7%d8%aa-entity-framework/">سبق وان قمت بكتابة مقالة مصغرة عن هذه التقنية</a>&#160; ، بيد انني وجدت نفسي متقبلا للإبحار فيها بعمق اكبر ، فقررت ان اكتب سلسلة يستفيد منها كل من يمر عليها .</p>
<p>&#160;</p>
<p>أترككم مع البداية بعد قليل</p>
Posted in ado.net entity framework  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/alnabhani.wordpress.com/146/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/alnabhani.wordpress.com/146/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/alnabhani.wordpress.com/146/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/alnabhani.wordpress.com/146/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/alnabhani.wordpress.com/146/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/alnabhani.wordpress.com/146/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/alnabhani.wordpress.com/146/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/alnabhani.wordpress.com/146/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/alnabhani.wordpress.com/146/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/alnabhani.wordpress.com/146/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=alnabhani.wordpress.com&blog=454111&post=146&subd=alnabhani&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://alnabhani.wordpress.com/2009/11/28/%d8%ad%d9%84%d9%82-%d8%a8%d8%b9%d9%8a%d8%af-%d9%85%d8%b9-%d8%a5%d8%b7%d8%a7%d8%b1-%d8%a7%d9%84%d8%b9%d9%85%d9%84-ado-net-entity-framework/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="" medium="image">
			<media:title type="html">alnabhani</media:title>
		</media:content>
	</item>
		<item>
		<title>هل سمعت بـ T4 ؟</title>
		<link>http://alnabhani.wordpress.com/2009/09/08/%d9%87%d9%84-%d8%b3%d9%85%d8%b9%d8%aa-%d8%a8%d9%80-t4-%d8%9f/</link>
		<comments>http://alnabhani.wordpress.com/2009/09/08/%d9%87%d9%84-%d8%b3%d9%85%d8%b9%d8%aa-%d8%a8%d9%80-t4-%d8%9f/#comments</comments>
		<pubDate>Mon, 07 Sep 2009 20:32:33 +0000</pubDate>
		<dc:creator>alnabhani</dc:creator>
				<category><![CDATA[تقنية net.]]></category>
		<category><![CDATA[.net 4]]></category>
		<category><![CDATA[code generation]]></category>
		<category><![CDATA[t4]]></category>

		<guid isPermaLink="false">http://alnabhani.wordpress.com/2009/09/08/%d9%87%d9%84-%d8%b3%d9%85%d8%b9%d8%aa-%d8%a8%d9%80-t4-%d8%9f/</guid>
		<description><![CDATA[ان كنت قد تجولت في مواقع الانترنت ذات العلاقه بمايكروسوفت ، فأكيد ان صداعا في الرأس بدأ يصيبك من رؤية بعض المصطلحات المعتمدة في الاصدرات القادمة ابرزها T4 ، فعشرات المواقع والمجلات والمدونات تتحدث عن T4 واجزم انك رأيت ذلك المصطلح امامك عشرات المرات ! والسؤال الذي يطرح نفسه : ماذا يقصد بـ T4 ؟ [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=alnabhani.wordpress.com&blog=454111&post=145&subd=alnabhani&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p align="justify">ان كنت قد تجولت في مواقع الانترنت ذات العلاقه بمايكروسوفت ، فأكيد ان صداعا في الرأس بدأ يصيبك من رؤية بعض المصطلحات المعتمدة في الاصدرات القادمة ابرزها T4 ، فعشرات المواقع والمجلات والمدونات تتحدث عن T4 واجزم انك رأيت ذلك المصطلح امامك عشرات المرات ! والسؤال الذي يطرح نفسه : ماذا يقصد بـ T4 ؟ </p>
<p align="justify">T4 هو رمز الى عبارة Text Templating Transformation Toolkit &#8211; اي حرف T اربع مرات بدل TTTT !! &#8211; وهي تقنية طورتها مايكروسوفت سابقا وقد قامت حاليا برفع متسوى تطويرها الى مرحلة متقدمة جدا ، هذه التقنية تستخدم في توليد الاكواد Code Generation في مختلف منتجات مايكروسوفت وابرزها بطبيعه الحال Visual Studio .&#160; </p>
<p align="justify">محرك T4 موجود اصلا في النسخه 2008 وقادم بشكل قوي جدا في 2010 ، ففي الاصدار الحالي لايوجد اي اداة Tool لاستخدامها في اعادة توليد الاكواد الروتينية ، ولكن في الاصدار 2010 فالوضع مختلف حقا من هذه الناحية ، وبالنسبه للاصدار 2008 فيمكنك استخدام ادوات خارجيه تؤدي هذا الغرض منها اداة Visual T4 Editor و Visual T4 Code Generator وبعضها يتوفر في اصدارات مجانية وهي تتميز بإندماجها بشكل كلي مع Visual Studio . </p>
<p align="justify">موقع الاداة Visual T4 هو : <a href="http://www.visualt4.com/">http://www.visualt4.com/</a>    <br />وموقع الاداة&#160; Visual T4 Code Generator هو :</p>
<p align="justify"><a title="http://t4-editor.tangible-engineering.com/T4-Editor-Visual-T4-Editing.html" href="http://t4-editor.tangible-engineering.com/T4-Editor-Visual-T4-Editing.html">http://t4-editor.tangible-engineering.com/T4-Editor-Visual-T4-Editing.html</a></p>
Posted in تقنية net. Tagged: .net 4, code generation, t4 <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/alnabhani.wordpress.com/145/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/alnabhani.wordpress.com/145/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/alnabhani.wordpress.com/145/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/alnabhani.wordpress.com/145/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/alnabhani.wordpress.com/145/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/alnabhani.wordpress.com/145/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/alnabhani.wordpress.com/145/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/alnabhani.wordpress.com/145/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/alnabhani.wordpress.com/145/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/alnabhani.wordpress.com/145/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=alnabhani.wordpress.com&blog=454111&post=145&subd=alnabhani&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://alnabhani.wordpress.com/2009/09/08/%d9%87%d9%84-%d8%b3%d9%85%d8%b9%d8%aa-%d8%a8%d9%80-t4-%d8%9f/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
	
		<media:content url="" medium="image">
			<media:title type="html">alnabhani</media:title>
		</media:content>
	</item>
		<item>
		<title>الأداة CAT.NET</title>
		<link>http://alnabhani.wordpress.com/2009/09/04/%d8%a7%d9%84%d8%a3%d8%af%d8%a7%d8%a9-cat-net/</link>
		<comments>http://alnabhani.wordpress.com/2009/09/04/%d8%a7%d9%84%d8%a3%d8%af%d8%a7%d8%a9-cat-net/#comments</comments>
		<pubDate>Thu, 03 Sep 2009 20:23:35 +0000</pubDate>
		<dc:creator>alnabhani</dc:creator>
				<category><![CDATA[تقنية net.]]></category>
		<category><![CDATA[beta]]></category>
		<category><![CDATA[cat.net]]></category>
		<category><![CDATA[code analysis]]></category>

		<guid isPermaLink="false">http://alnabhani.wordpress.com/2009/09/04/%d8%a7%d9%84%d8%a3%d8%af%d8%a7%d8%a9-cat-net/</guid>
		<description><![CDATA[هي اداة برمجية مجانية تقوم شركة مايكروسوفت بإصدارها ، وهي عبارة عن اضافة على Visual Studio 2005 وما فوق ، تهدف الى البحث في اكواد مشاريعك عن نقاط الضعف في البيانات ، والتي يقصد بها الثغرات المعروفة كـ SQL Injection ،XSS Injection و XPath Injection في اكوادك وتعرضها عليك ، هذه قائمة بهذه الثغرات التي [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=alnabhani.wordpress.com&blog=454111&post=144&subd=alnabhani&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>هي اداة برمجية مجانية تقوم شركة مايكروسوفت بإصدارها ، وهي عبارة عن اضافة على Visual Studio 2005 وما فوق ، تهدف الى البحث في اكواد مشاريعك عن نقاط الضعف في البيانات ، والتي يقصد بها الثغرات المعروفة كـ SQL Injection ،XSS Injection و XPath Injection في اكوادك وتعرضها عليك ، هذه قائمة بهذه الثغرات التي تكتشفها: </p>
<blockquote><p dir="ltr" align="left">Cross Site Scripting     <br />SQL Injection      <br />Process Command Injection      <br />File Canonicalization      <br />Exception Information      <br />LDAP Injection      <br />XPATH Injection      <br />Redirection to User Controlled Site</p>
</blockquote>
<p>لتحميل هذه الاداة اتبع <a href="http://www.microsoft.com/downloads/details.aspx?FamilyId=0178e2ef-9da8-445e-9348-c93f24cc9f9d&amp;displaylang=en" target="_blank">الرابط التالي</a> ، علما بانها لاتزال تحت التطوير beta .</p>
Posted in تقنية net. Tagged: beta, cat.net, code analysis <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/alnabhani.wordpress.com/144/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/alnabhani.wordpress.com/144/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/alnabhani.wordpress.com/144/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/alnabhani.wordpress.com/144/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/alnabhani.wordpress.com/144/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/alnabhani.wordpress.com/144/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/alnabhani.wordpress.com/144/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/alnabhani.wordpress.com/144/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/alnabhani.wordpress.com/144/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/alnabhani.wordpress.com/144/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=alnabhani.wordpress.com&blog=454111&post=144&subd=alnabhani&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://alnabhani.wordpress.com/2009/09/04/%d8%a7%d9%84%d8%a3%d8%af%d8%a7%d8%a9-cat-net/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="" medium="image">
			<media:title type="html">alnabhani</media:title>
		</media:content>
	</item>
		<item>
		<title>لا يمكنك انشاء مشروع جديد يا حبيبي !</title>
		<link>http://alnabhani.wordpress.com/2009/08/30/%d9%84%d8%a7-%d9%8a%d9%85%d9%83%d9%86%d9%83-%d8%a7%d9%86%d8%b4%d8%a7%d8%a1-%d9%85%d8%b4%d8%b1%d9%88%d8%b9-%d8%ac%d8%af%d9%8a%d8%af-%d9%8a%d8%a7-%d8%ad%d8%a8%d9%8a%d8%a8%d9%8a/</link>
		<comments>http://alnabhani.wordpress.com/2009/08/30/%d9%84%d8%a7-%d9%8a%d9%85%d9%83%d9%86%d9%83-%d8%a7%d9%86%d8%b4%d8%a7%d8%a1-%d9%85%d8%b4%d8%b1%d9%88%d8%b9-%d8%ac%d8%af%d9%8a%d8%af-%d9%8a%d8%a7-%d8%ad%d8%a8%d9%8a%d8%a8%d9%8a/#comments</comments>
		<pubDate>Sun, 30 Aug 2009 10:06:05 +0000</pubDate>
		<dc:creator>alnabhani</dc:creator>
				<category><![CDATA[تقنية net.]]></category>
		<category><![CDATA[problem]]></category>
		<category><![CDATA[visual studio 2008]]></category>

		<guid isPermaLink="false">http://alnabhani.wordpress.com/2009/08/30/%d9%84%d8%a7-%d9%8a%d9%85%d9%83%d9%86%d9%83-%d8%a7%d9%86%d8%b4%d8%a7%d8%a1-%d9%85%d8%b4%d8%b1%d9%88%d8%b9-%d8%ac%d8%af%d9%8a%d8%af-%d9%8a%d8%a7-%d8%ad%d8%a8%d9%8a%d8%a8%d9%8a/</guid>
		<description><![CDATA[في يوم حالك السواد ، قمت بتشغيل حاسوبي لأجد مجموعة من المشاكل الغريبة في النظام – ويندوز فيستا – حيث ان متصفح الانترنت Internet Explorer 8 كل بضعه دقائق ينبهني بأن برنامجا حاول تعديل محرك البحث الرئيسي فيه ، وبعض البرامج لا تعمل كما يجب ، توجهت بعدها إلى Visual Studio 2008 وهناك كانت المفاجأه [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=alnabhani.wordpress.com&blog=454111&post=143&subd=alnabhani&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>في يوم حالك السواد ، قمت بتشغيل حاسوبي لأجد مجموعة من المشاكل الغريبة في النظام – ويندوز فيستا – حيث ان متصفح الانترنت Internet Explorer 8 كل بضعه دقائق ينبهني بأن برنامجا حاول تعديل محرك البحث الرئيسي فيه ، وبعض البرامج لا تعمل كما يجب ، توجهت بعدها إلى Visual Studio 2008 وهناك كانت المفاجأه ! لا يوجد أي قالب Tamplate لأي نوع من المشاريع في أي لغة سواء VB او C# وبالتالي لا يمكن انشاء أي مشروع جديد ! ولا حتى اضافه أي عنصر جديد إلى أي مشروع موجود مسبقا ! وفي كل مره تظهر امامي الرسالة التالية :</p>
<p>&quot;No template information found. See the application log in Event Viewer for more details. To open Event Viewer, click Start, click Control Panel, double-click Administrative Tools, and then double-click Event Viewer.&quot;</p>
<p>توجهت إلى مستعرض الاحداث Event Viewer فوجدت الرسالة التالية :</p>
<p>the global template information is out of date. Regenerate the templates by running &#8216;devenv.exe /installvstemplates&#8217; or reinstalling the application.</p>
<p>فور قراءتي للرسالة السابقه ، توجهت إلى محرر الاوامر في ويندوز Command Promote وكتبت ما يلي الاوامر التالية سطرا بسطر :</p>
<p>cd \</p>
<p>cd c:\Program files\Microsoft visual Studio 9.0\common7\IDE</p>
<p>devenv.exe /installvstemplates</p>
<p>بعد تلك السطور انحلت المشكله وعادت المياه إلى مجاريها !</p>
<p>تحياتي</p>
Posted in تقنية net. Tagged: problem, visual studio 2008 <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/alnabhani.wordpress.com/143/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/alnabhani.wordpress.com/143/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/alnabhani.wordpress.com/143/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/alnabhani.wordpress.com/143/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/alnabhani.wordpress.com/143/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/alnabhani.wordpress.com/143/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/alnabhani.wordpress.com/143/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/alnabhani.wordpress.com/143/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/alnabhani.wordpress.com/143/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/alnabhani.wordpress.com/143/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=alnabhani.wordpress.com&blog=454111&post=143&subd=alnabhani&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://alnabhani.wordpress.com/2009/08/30/%d9%84%d8%a7-%d9%8a%d9%85%d9%83%d9%86%d9%83-%d8%a7%d9%86%d8%b4%d8%a7%d8%a1-%d9%85%d8%b4%d8%b1%d9%88%d8%b9-%d8%ac%d8%af%d9%8a%d8%af-%d9%8a%d8%a7-%d8%ad%d8%a8%d9%8a%d8%a8%d9%8a/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="" medium="image">
			<media:title type="html">alnabhani</media:title>
		</media:content>
	</item>
		<item>
		<title>حقول الهوية : بين الفئات البرمجية وحقول SQL Server :</title>
		<link>http://alnabhani.wordpress.com/2009/08/23/%d8%ad%d9%82%d9%88%d9%84-%d8%a7%d9%84%d9%87%d9%88%d9%8a%d8%a9-%d8%a8%d9%8a%d9%86-%d8%a7%d9%84%d9%81%d8%a6%d8%a7%d8%aa-%d8%a7%d9%84%d8%a8%d8%b1%d9%85%d8%ac%d9%8a%d8%a9-%d9%88%d8%ad%d9%82%d9%88%d9%84/</link>
		<comments>http://alnabhani.wordpress.com/2009/08/23/%d8%ad%d9%82%d9%88%d9%84-%d8%a7%d9%84%d9%87%d9%88%d9%8a%d8%a9-%d8%a8%d9%8a%d9%86-%d8%a7%d9%84%d9%81%d8%a6%d8%a7%d8%aa-%d8%a7%d9%84%d8%a8%d8%b1%d9%85%d8%ac%d9%8a%d8%a9-%d9%88%d8%ad%d9%82%d9%88%d9%84/#comments</comments>
		<pubDate>Sun, 23 Aug 2009 17:28:13 +0000</pubDate>
		<dc:creator>alnabhani</dc:creator>
				<category><![CDATA[برمجة قواعد البيانات ADO.NET]]></category>
		<category><![CDATA[تقنية net.]]></category>
		<category><![CDATA[guid]]></category>
		<category><![CDATA[identity key]]></category>
		<category><![CDATA[key field]]></category>
		<category><![CDATA[حقل مفتاحي]]></category>

		<guid isPermaLink="false">http://alnabhani.wordpress.com/2009/08/23/%d8%ad%d9%82%d9%88%d9%84-%d8%a7%d9%84%d9%87%d9%88%d9%8a%d8%a9-%d8%a8%d9%8a%d9%86-%d8%a7%d9%84%d9%81%d8%a6%d8%a7%d8%aa-%d8%a7%d9%84%d8%a8%d8%b1%d9%85%d8%ac%d9%8a%d8%a9-%d9%88%d8%ad%d9%82%d9%88%d9%84/</guid>
		<description><![CDATA[يوجد الكثير من الطرق التي لعمل حقول هوية مميزة Identity fields او ما يعرف بالمفتاح الأساسي Primary Key Filed ، من اشهرها على الاطلاق حقل الـ Autoincrement او الترقيم التلقائي ، والتي يتم فيها توليد رقم تلقائي يزيد عن اخر رقم في العداد الخاص بقيمة تكون في اغلب الاحيان 1 ، تتميز بالخفة والنحافه ، [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=alnabhani.wordpress.com&blog=454111&post=142&subd=alnabhani&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>يوجد الكثير من الطرق التي لعمل حقول هوية مميزة Identity fields او ما يعرف بالمفتاح الأساسي Primary Key Filed ، من اشهرها على الاطلاق حقل الـ Autoincrement او الترقيم التلقائي ، والتي يتم فيها توليد رقم تلقائي يزيد عن اخر رقم في العداد الخاص بقيمة تكون في اغلب الاحيان 1 ، تتميز بالخفة والنحافه ، وبالتالي فنحن نتوقع منها الاداء المتميز كونها تحمل قيمة رقمية صغيرة تبدأ من 1 وتصل للآلاف لكنها قد تصل الملايين كلما كبر حجم البرنامج وزاد استخدامه ، وان يكن ، فهي لاتزال ارقام صحيحه integers قد تكون مثلا 99999999999953424 وماذا يعني ذلك ؟ فلا يوجد مشاكل حتى اللحظه فما احلاها !</p>
<p>ولكن ما يعيب هذا الاسلوب هو افتقادها إلى شيء مهم للغاية ، حيث اننا في التطبيقات الكبيرة نوعا ما ، يكون اغلب اعتمادنا على الوضع المنفصل فقد نستخدم Dataset,LINQtoSQL,Entity Framework,…etc ونضيف سجلات Records وقد يتم تعديلها حتى قبل ان ترسل إلى قاعدة البيانات database ، والمشكلة التي ستحدث هنا ، ان كائنات البيانات التي بحوزتنا لن تستطيع اسناد قيمة لحقل المفتاح الأساسي ، حيث ان اصدارها يتم حكرا على قاعدة البيانات فقط ، ولن نستطيع معرفة قيمتها الا بإضافة السجلات إلى قاعدة البيانات وهنا تمكن المشكلة ، ففي التطبيقات التجارية والتطبيقات التي تعتمد على تعدد الطبقات n-tier applications ، يتم اضافة العديد من السجلات وحزمها كلها في حزمة واحده لإرسالها دفعة واحدة إلى قاعدة البيانات ، كما يتم قبل ذلك كله تبادل البيانات بين طبقتي العرض والاعمال ، ناهيك عما يدور خلف الكواليس من عمليات تحقق وسين وجيم ! </p>
<p> <span id="more-142"></span>
<p>من هنا تبرز الحاجه إلى التعرف على حقل المفتاح الاساسي بطريقة اخرى ، تكمن في اعطائه قيمة فريده تماما – دون ان نخاف من تكرارها &#8211; تسند اليه وقت ادخال البيانات في التطبيق وتنتهي بذلك المشكلة . لكن ما هي هذه القيم ؟ </p>
<p>ان حاولنا ان نقوم بإنشاء فئة خاصة بنا فذلك جيد ، لكننا قد نتعب كثيرا فيها في سبيل ضمان عدم تكرر القيمة المنشأة مع أي نسخه اخرى من الكائن من نفس الفئة في الذاكرة ، او نسخه اخرى من التطبيق ككل في جهاز آخر ، قد نحتاج إلى دالة توليد الارقام العشوائيه وندخل لها معادلة محترمة في فترة interval رقمية كبيرة جدا قد تتراوح بين 1 و 5 ملايين مثلا ،ونسندها إلى حقل المفتاح الأساسي ، لكن في برنامج يتوقع ان تكون سجلاته بأعداد كبيرة فإن احتمالية تكرار الرقم الواحد ستكون اكبر وستزداد بزيادة عدد نسخ البرنامج العاملة في الشبكة !</p>
<p>قد يقترح احدهم ان نكبر المجال ليكون إلى 20 مليون مثلا وبالتالي نضع انفسنا في امان اكثر ونكون على يقين بأن نسبه تكرار الرقم صغيرة جدا – اقسم 1 على 20 مليون ! – ومن هنا سنحتاج إلى ان يكون حقل المفتاح الاساسي من نوع خاص ، فالنوع الرقمي &#8211; اما في .net او في SQL Server &#8211; لن يحتويه في اغلب الاحيان فنحن نتحدث من منظور التطبيقات المتوسطة والكبيرة والملايين ، مما قد يدفعنا إلى استخدام حقل نصي في قاعدة البيانات ، ونوع نصي كـ String مثلا في برنامجنا ، لكن هذا النوع يعاب عليه البطء في مثل هذه العمليات ، فهذا الحقل هو المفتاح الاساسي وتعتمد عليه كل العمليات الأخرى مما يعني ان ينخفض مستوى الأداء بشكل كبير جدا جدا ويصبح العمل بطيئا للغاية .</p>
<p>نفس المشكلة سنواجهها ان فكرنا في توليد بيانات عشوائية مختلطة بالنصوص والارقام ليكون لدينا قيمة مثل s334dfgr54 ولكنها ايضا ستكون نصيه بالرغم من اننا نعرف ان نسبه التكرار ستكون ضئيلة للغاية ايضا في هذه الحالة .</p>
<p>طيب والحل ؟ </p>
<p>ينفرد SQL Server وكذلك .Net Framework بالنوعين UniquIdentifier و GUID – الاول في الاول والثاني للثاني طبعا ! – فهذا النوع يقوم بتوليد سلسلة نصية طويلة مثل التالية: </p>
<p>dc63e853-804b-4eac-b2e8-270bf1095a63</p>
<p>21c5d16d-d455-49e1-ab4a-7ff39753c4f9</p>
<p>5690757b-544f-49d8-b412-d45433f55202</p>
<p>1c7c7409-a9cf-48cd-a051-6a3a145b90c3</p>
<p>1be8fd38-785c-4628-b5f8-efab7b4d7e40</p>
<p>fc9270f6-fc6b-426e-b7d8-d4b43ec73f6a</p>
<p>4f400213-dcdc-4c91-9ec0-5ce916332be4</p>
<p>74211c09-0bb7-4eea-8944-94581545e3a3</p>
<p>cbb03156-990e-4e15-891e-96788861b8f7</p>
<p>c3b60d21-94a0-4764-866b-582b04fa9701</p>
<p>d0921672-bfff-41c1-9c17-56a76d459d66</p>
<p>3434c358-2371-4352-b16e-c72c4c138525</p>
<p>21afb37d-5981-4c7f-b6f5-0c15a8b7cda5</p>
<p>c1675a25-c365-4015-8151-16d1b2ff7271</p>
<p>ceabf72d-3076-4784-80d8-879a53e21e0c</p>
<p>55760bd0-b7bc-4b14-8b4e-b808e9cb35fe</p>
<p>فنسبه تكرار الرقم ضئيلة للغاية وقد تصل إلى – بحسب حساباتي المتواضعة – 15.78E-51 تخيل 51 خانة عشرية كلها اصفار ! اذا نسبة ضئيلة جدا جدا من التكرار ، فمن هذه الناحية نضمن عدم التكرار ، ومن ناحية نوع البيانات فهو مدعوم في اطار العمل .net وفي قاعدة البيانات SQL Server ايضا ، طيب ماذا عن السرعة ؟</p>
<p>من ناحية السرعة فلا تقلق ، فبما اننا بعدنا عن النوع String فنحن في جهة آمنة من البطء ، خصوصا ان النوع مدعوم في كلا المكانين SQL Server و .Net Framework</p>
<p>وماذا بعد ؟</p>
<p>تتوفر الفئة GUID مباشرة في فضاء الاسماء System ، والميزة التي تتمتع بها انها Shared خصوصا الدالة NewGUID التي تعود بقيمة GUID هكذا : Guid.NewGuid() ، وبالنسبة لإنشاء كائن جديد فذلك عادي جدا : </p>
<p>&#160;</p>
<p dir="ltr">
<table border="1" cellspacing="0" cellpadding="2" width="500">
<tbody>
<tr>
<td valign="top" width="500">
<div class="code"><font color="#808080">&#160;&#160;&#160;&#160;&#160;&#160;&#160; </font><font color="#0000ff">Dim</font><font color="#808080">&#160;</font><font color="#000000">x</font><font color="#808080">&#160;</font><font color="#0000ff">As</font><font color="#808080">&#160;</font><font color="#000000">Guid</font><font color="#808080">               <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; </font><font color="#000000">x</font><font color="#808080">&#160;</font><font color="#0000ff">=</font><font color="#808080">&#160;</font><font color="#000000">Guid.NewGuid</font><font color="#808080">               <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; </font><font color="#2b91af">Console</font><font color="#000000">.WriteLine(x)</font><font color="#808080">               </p>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160; </font><font color="#2b91af">Console</font><font color="#000000">.Read()</font> </div>
</td>
</tr>
</tbody>
</table>
<p dir="rtl">ولكن تذكر دائما وجوب استدعاء الدالة NewGUID في حالة رغبتك بإنشاء مميز جديد ، حيث ان الكود التالي :</p>
<p dir="ltr">&#160;</p>
<table border="1" cellspacing="0" cellpadding="2" width="500">
<tbody>
<tr>
<td dir="ltr" valign="top" width="500">
<div class="code"><font color="#808080">&#160;&#160;&#160;&#160;&#160;&#160;&#160; </font><font color="#000000">x</font><font color="#808080">&#160;</font><font color="#0000ff">=</font><font color="#808080">&#160;</font><font color="#000000">Guid.NewGuid</font><font color="#808080">             <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; </font><font color="#2b91af">Console</font><font color="#000000">.WriteLine(x)</font><font color="#808080">             <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; </font><font color="#2b91af">Console</font><font color="#000000">.WriteLine(x)</font><font color="#808080">             <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; </font><font color="#2b91af">Console</font><font color="#000000">.WriteLine(x)</font><font color="#808080">             </p>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160; </font><font color="#2b91af">Console</font><font color="#000000">.Read()</font> </div>
</td>
</tr>
</tbody>
</table>
<p>&#160;</p>
<p>سيعطينا نفس الناتج تماما مرتين ! والحل يكمن في استدعاء الطريقة المشتركة Guid.NewGuid في كل مرة :</p>
<p>&#160;</p>
<table border="1" cellspacing="0" cellpadding="2" width="500">
<tbody>
<tr>
<td dir="ltr" valign="top" width="500">
<div class="code"><font color="#0000ff">Dim</font><font color="#808080">&#160;</font><font color="#000000">x</font><font color="#808080">&#160;</font><font color="#0000ff">As</font><font color="#808080">&#160;</font><font color="#000000">Guid</font><font color="#808080">             <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; </font><font color="#000000">x</font><font color="#808080">&#160;</font><font color="#0000ff">=</font><font color="#808080">&#160;</font><font color="#000000">Guid.NewGuid</font><font color="#808080">             <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; </font><font color="#2b91af">Console</font><font color="#000000">.WriteLine(x)</font><font color="#808080">             <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; </font><font color="#000000">x</font><font color="#808080">&#160;</font><font color="#0000ff">=</font><font color="#808080">&#160;</font><font color="#000000">Guid.NewGuid</font><font color="#808080">             <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; </font><font color="#2b91af">Console</font><font color="#000000">.WriteLine(x)</font><font color="#808080">             <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; </font><font color="#000000">x</font><font color="#808080">&#160;</font><font color="#0000ff">=</font><font color="#808080">&#160;</font><font color="#000000">Guid.NewGuid</font><font color="#808080">             <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; </font><font color="#2b91af">Console</font><font color="#000000">.WriteLine(x)</font><font color="#808080">             </p>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160; </font><font color="#2b91af">Console</font><font color="#000000">.Read()</font> </div>
</td>
</tr>
</tbody>
</table>
<p>بهذا نكون قد انتهينا من هذا الموضوع .</p>
<p>تحياتي </p>
Posted in برمجة قواعد البيانات ADO.NET, تقنية net. Tagged: guid, identity key, key field, حقل مفتاحي <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/alnabhani.wordpress.com/142/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/alnabhani.wordpress.com/142/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/alnabhani.wordpress.com/142/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/alnabhani.wordpress.com/142/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/alnabhani.wordpress.com/142/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/alnabhani.wordpress.com/142/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/alnabhani.wordpress.com/142/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/alnabhani.wordpress.com/142/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/alnabhani.wordpress.com/142/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/alnabhani.wordpress.com/142/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=alnabhani.wordpress.com&blog=454111&post=142&subd=alnabhani&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://alnabhani.wordpress.com/2009/08/23/%d8%ad%d9%82%d9%88%d9%84-%d8%a7%d9%84%d9%87%d9%88%d9%8a%d8%a9-%d8%a8%d9%8a%d9%86-%d8%a7%d9%84%d9%81%d8%a6%d8%a7%d8%aa-%d8%a7%d9%84%d8%a8%d8%b1%d9%85%d8%ac%d9%8a%d8%a9-%d9%88%d8%ad%d9%82%d9%88%d9%84/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
	
		<media:content url="" medium="image">
			<media:title type="html">alnabhani</media:title>
		</media:content>
	</item>
		<item>
		<title>3- استخدام الـ Entity Framework لتطوير نوافذ من النوع MasterDetails:</title>
		<link>http://alnabhani.wordpress.com/2009/08/10/3-%d8%a7%d8%b3%d8%aa%d8%ae%d8%af%d8%a7%d9%85-%d8%a7%d9%84%d9%80-entity-framework-%d9%84%d8%aa%d8%b7%d9%88%d9%8a%d8%b1-%d9%86%d9%88%d8%a7%d9%81%d8%b0-%d9%85%d9%86-%d8%a7%d9%84%d9%86%d9%88%d8%b9-master/</link>
		<comments>http://alnabhani.wordpress.com/2009/08/10/3-%d8%a7%d8%b3%d8%aa%d8%ae%d8%af%d8%a7%d9%85-%d8%a7%d9%84%d9%80-entity-framework-%d9%84%d8%aa%d8%b7%d9%88%d9%8a%d8%b1-%d9%86%d9%88%d8%a7%d9%81%d8%b0-%d9%85%d9%86-%d8%a7%d9%84%d9%86%d9%88%d8%b9-master/#comments</comments>
		<pubDate>Mon, 10 Aug 2009 19:13:14 +0000</pubDate>
		<dc:creator>alnabhani</dc:creator>
				<category><![CDATA[برمجة قواعد البيانات ADO.NET]]></category>
		<category><![CDATA[ado.net]]></category>
		<category><![CDATA[entity framework]]></category>
		<category><![CDATA[master details]]></category>

		<guid isPermaLink="false">http://alnabhani.wordpress.com/2009/08/10/3-%d8%a7%d8%b3%d8%aa%d8%ae%d8%af%d8%a7%d9%85-%d8%a7%d9%84%d9%80-entity-framework-%d9%84%d8%aa%d8%b7%d9%88%d9%8a%d8%b1-%d9%86%d9%88%d8%a7%d9%81%d8%b0-%d9%85%d9%86-%d8%a7%d9%84%d9%86%d9%88%d8%b9-master/</guid>
		<description><![CDATA[عندما نكون قد وصلنا إلى هذه المرحلة ، اعتقد انه قد حان الوقت لنكون قد انتهينا من الحاجه في اظهار الكثير من الخطوات ! حيث انني اود عرض الاختلافات فقط !
نقوم بداية بإضافة فئة جديدة من النوع ADO.NET Entity data Model ونسميها مثلا CustomerOrdersModel ثم يظهر امامنا المعالج طالبا منا تحديد كيفية تصميم مصدر البيانات [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=alnabhani.wordpress.com&blog=454111&post=141&subd=alnabhani&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>عندما نكون قد وصلنا إلى هذه المرحلة ، اعتقد انه قد حان الوقت لنكون قد انتهينا من الحاجه في اظهار الكثير من الخطوات ! حيث انني اود عرض الاختلافات فقط !</p>
<p>نقوم بداية بإضافة فئة جديدة من النوع ADO.NET Entity data Model ونسميها مثلا CustomerOrdersModel ثم يظهر امامنا المعالج طالبا منا تحديد كيفية تصميم مصدر البيانات لنطلب منه توليد النموذج بكرم من قاعدة البيانات :</p>
<p><a href="http://www.vb4arab.com/vb/uploaded/486/01249931147.png" target="_blank"><img src="http://www.vb4arab.com/vb/uploaded/486/01249931147.png" width="448" height="480" /></a> </p>
<p>الخطوة التالية ، يطلب منك المعالج تحديد قاعدة البيانات ، قم بتحديد قاعدة البيانات Northwind بنفسك ، ثم انتقل إلى الخطوة التي بعدها وحدد الجدولين Customer,Orders ، وفي خانة الـ Namespace اكتب اسم دلالي مميز سنحتاجه لاحقا وليكن Entities ، انه المعالج بعدها ، لتفتح لك نافذة جديدة وهي نافذة الـ ModelDesigner ، طبعا لا حاجه لك في تعديل أي شيء هناك :</p>
<p><a href="http://www.vb4arab.com/vb/uploaded/486/11249931147.png" target="_blank"><img src="http://www.vb4arab.com/vb/uploaded/486/11249931147.png" width="448" height="480" /></a> </p>
<p>&#160;</p>
<p>لكنني اود اخبارك بأنه يفضل ل كان تغير قيمة الخاصية Entity Container Name والتي تمثل اسم الفئة الحاضنة لجداول قاعدة البيانات ، فهي التي سنستخدمها دوما في اكوادنا ، ففي حالة احتواء مشروعك على عدة نماذج Models من هذا النوع فقد يتكرر الاسم عليك ويسبب لك شيء من الارتباك البرمجي .</p>
<p>الآن توجه إلى النافذة الجديدة Form1 لنقوم بتطوير نافذة Master Details من النوع Full Details ، سنحتاج اولا إلى اضافة الـ DataSource ، وهنا تشترك الطريقتان LINQ-to-SQL و EntityFramework في كون الطريق هي نفسها ، حيث تختار ان يكون مصدر البيانات هو كائن Object ثم تحدد الفئة Customer وتنهي المعالج كالعادة لتجد الفئات قد وجدت على شكل جداول في النافذة Datasources ، قم بعدها بسحب الجدول Customer على شكل Details إلى النافذة from1 ثم الجدول Orders الفرعي التابع له النافذة ايضا ! بعدها انتقل مباشرة إلى نافذة محرر الاكواد حيث اننا سنحتاج إلى كتابة سطيرات برمجي بسيطة :</p>
<table border="1" cellspacing="0" cellpadding="2" width="500">
<tbody>
<tr>
<td dir="ltr" valign="top" width="500">
<div class="code"><font color="#0000ff">Public</font><font color="#808080">&#160;</font><font color="#0000ff">Class</font><font color="#808080">&#160;</font><font color="#000000">Form1</font><font color="#808080">             <br />&#160;&#160;&#160; </font><font color="#0000ff">Dim</font><font color="#808080">&#160;</font><font color="#000000">ent</font><font color="#808080">&#160;</font><font color="#0000ff">As</font><font color="#808080">&#160;</font><font color="#0000ff">New</font><font color="#808080">&#160;</font><font color="#000000">Entities</font><font color="#808080">             </p>
<p>&#160;&#160;&#160; </font><font color="#0000ff">Private</font><font color="#808080">&#160;</font><font color="#0000ff">Sub</font><font color="#808080">&#160;</font><font color="#000000">Form1_Load(</font><font color="#0000ff">ByVal</font><font color="#808080">&#160;</font><font color="#000000">sender</font><font color="#808080">&#160;</font><font color="#0000ff">As</font><font color="#808080">&#160;</font><font color="#000000">System.</font><font color="#0000ff">Object</font><font color="#000000">,</font><font color="#808080"> _ </font><font color="#0000ff">ByVal</font><font color="#808080">&#160;</font><font color="#000000">e</font><font color="#808080">&#160;</font><font color="#0000ff">As</font><font color="#808080">&#160;</font><font color="#000000">System.</font><font color="#2b91af">EventArgs</font><font color="#000000">)</font><font color="#808080">&#160;</font><font color="#0000ff">Handles</font><font color="#808080">&#160;</font><font color="#0000ff">MyBase</font><font color="#000000">.Load</font><font color="#808080">             </p>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160; </font><font color="#0000ff">Me</font><font color="#000000">.CustomersBindingSource.DataSource</font><font color="#808080">&#160;</font><font color="#0000ff">=</font><font color="#808080">&#160;</font><font color="#000000">ent.Customers.Include(</font><font color="#808080">&quot;Orders&quot;</font><font color="#000000">)</font><font color="#808080">             </p>
<p>&#160;&#160;&#160; </font><font color="#0000ff">End</font><font color="#808080">&#160;</font><font color="#0000ff">Sub</font><font color="#808080">             </p>
<p>&#160;&#160;&#160; </font><font color="#0000ff">Private</font><font color="#808080">&#160;</font><font color="#0000ff">Sub</font><font color="#808080">&#160;</font><font color="#000000">CustomersBindingNavigatorSaveItem_Click(</font><font color="#0000ff">ByVal</font><font color="#808080">&#160;</font><font color="#000000">sender</font><font color="#808080">&#160;</font><font color="#0000ff">As</font><font color="#808080">&#160;</font><font color="#000000">System.</font><font color="#0000ff">Object</font><font color="#000000">,</font><font color="#808080">&#160;</font><font color="#0000ff">ByVal</font><font color="#808080">&#160;</font><font color="#000000">e</font><font color="#808080">&#160;</font><font color="#0000ff">As</font><font color="#808080"> _ </font><font color="#000000">System.</font><font color="#2b91af">EventArgs</font><font color="#000000">)</font><font color="#808080">&#160;</font><font color="#0000ff">Handles</font><font color="#808080">&#160;</font><font color="#000000">CustomersBindingNavigatorSaveItem.Click</font><font color="#808080">             <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; </font><font color="#0000ff">Me</font><font color="#000000">.CustomersBindingSource.EndEdit()</font><font color="#808080">             <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; </font><font color="#0000ff">Me</font><font color="#000000">.ent.SaveChanges()</font><font color="#808080">             </p>
<p>&#160;&#160;&#160; </font><font color="#0000ff">End</font><font color="#808080">&#160;</font><font color="#0000ff">Sub</font> </div>
</td>
</tr>
</tbody>
</table>
</p>
<p>حيث نقوم اولا بتعريف كائن جديد من النوع Entities وهي الفئة التي تحضن باقي فئات الجداول في الـ Entity Framework ، وفي حدث التحميل نقوم باسناد قيمة إلى الكائن BindingDataSource ولكن هنا لدي ملاحظه مهمه جدا ، وهي ضرورة استخدام الطريقة Inculde وارسال إسم الجدول المرتبط معها ، حيث لو كتبت ent.Customers فإن سجلات الجدول الفرعي Orders لن تظهر وانما ستظهر البيانات الاساسية فقط من الجدول الاب Customers .</p>
<p>وبالنسبة لحفظ التعديلات فكما نلاحظ فإننا لا نحتاج إلا إلى مناداة الطريقة SaveChanges حتى يتولى عنك خلفان وعباس وحمدان القيام بالباقي !</p>
<p>بالنسبة لتطوير نموذج من النوع Lookup List فلا اعتقد انك ترغب في اعادة كل السطور من الدرسين الماضيين وتغيير كلمه واحده فقط في كل مره !</p>
Posted in برمجة قواعد البيانات ADO.NET Tagged: ado.net, entity framework, master details <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/alnabhani.wordpress.com/141/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/alnabhani.wordpress.com/141/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/alnabhani.wordpress.com/141/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/alnabhani.wordpress.com/141/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/alnabhani.wordpress.com/141/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/alnabhani.wordpress.com/141/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/alnabhani.wordpress.com/141/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/alnabhani.wordpress.com/141/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/alnabhani.wordpress.com/141/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/alnabhani.wordpress.com/141/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=alnabhani.wordpress.com&blog=454111&post=141&subd=alnabhani&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://alnabhani.wordpress.com/2009/08/10/3-%d8%a7%d8%b3%d8%aa%d8%ae%d8%af%d8%a7%d9%85-%d8%a7%d9%84%d9%80-entity-framework-%d9%84%d8%aa%d8%b7%d9%88%d9%8a%d8%b1-%d9%86%d9%88%d8%a7%d9%81%d8%b0-%d9%85%d9%86-%d8%a7%d9%84%d9%86%d9%88%d8%b9-master/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="" medium="image">
			<media:title type="html">alnabhani</media:title>
		</media:content>

		<media:content url="http://www.vb4arab.com/vb/uploaded/486/01249931147.png" medium="image" />

		<media:content url="http://www.vb4arab.com/vb/uploaded/486/11249931147.png" medium="image" />
	</item>
		<item>
		<title>2- استخدام مزود LINQ-to-SQL</title>
		<link>http://alnabhani.wordpress.com/2009/08/04/2-%d8%a7%d8%b3%d8%aa%d8%ae%d8%af%d8%a7%d9%85-%d9%85%d8%b2%d9%88%d8%af-linq-to-sql/</link>
		<comments>http://alnabhani.wordpress.com/2009/08/04/2-%d8%a7%d8%b3%d8%aa%d8%ae%d8%af%d8%a7%d9%85-%d9%85%d8%b2%d9%88%d8%af-linq-to-sql/#comments</comments>
		<pubDate>Tue, 04 Aug 2009 04:34:47 +0000</pubDate>
		<dc:creator>alnabhani</dc:creator>
				<category><![CDATA[تقنية عامة]]></category>

		<guid isPermaLink="false">http://alnabhani.wordpress.com/?p=139</guid>
		<description><![CDATA[استخدام مزود LINQ-to-SQL لا يختلف كثيرا عن استخدام Dataset الا في بعض الخطوات البسيطة ، كما سنرى الآن :
في البداية ، نقوم بإضافة فئات LINQ-to-SQL وذلك بالتوجه إلى القائمة Project &#124; Add New Project Item ثم اختيار LINQ-to-SQL Classes واعطها الاسم CustomerOrders ، ستظهر امامك نافذة خالية ، سنحتاج ان نقوم بسحب الجداول المطلوبة إلى [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=alnabhani.wordpress.com&blog=454111&post=139&subd=alnabhani&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>استخدام مزود LINQ-to-SQL لا يختلف كثيرا عن استخدام Dataset الا في بعض الخطوات البسيطة ، كما سنرى الآن :<br />
في البداية ، نقوم بإضافة فئات LINQ-to-SQL وذلك بالتوجه إلى القائمة Project | Add New Project Item ثم اختيار LINQ-to-SQL Classes واعطها الاسم CustomerOrders ، ستظهر امامك نافذة خالية ، سنحتاج ان نقوم بسحب الجداول المطلوبة إلى الجزء الايسر منها من نافذة Server Explorer ، لذلك اذهب إلى نافذة server Explorer وافتح قاعدة البيانات من هناك او اضفها إلى تلك القائمة من خلال الزر Connect to Database . بعد قيامك بهذا ، قم بسحب الجدولين Order,Customers إلى الجزء الايسر من نافذة الـ O/R Designer التي ظهرت قبل قليل ، وستلاحظ انشاء الجدولين هناك على شكل فئات كما بالصورة التالية :</p>
<div>
<div><img src="http://www.vb4arab.com/vb/uploaded/486/31249359558.png" alt="" /></div>
</div>
<p>بهذا نكون قد هيئنا فئات LINQ-to-SQL للعمل عليها ، ننتقل الان إلى تصميم النافذة الاولى ، وهي التي تتبع النمط Full Detailed ، سنتوجه بداية إلى النافذة Data Sources ونقوم بإضافة مصدر بيانات جديد لكن انتبه عندما يظهر امامك المعالج اختر الخيار Objects وليس Database كما بالصورة التالية :</p>
<div>
<div><img src="http://www.vb4arab.com/vb/uploaded/486/21249359558.png" alt="" /></div>
</div>
<p>وذلك لاننا سنختار ان يكون مصدر البيانات هو الفئات التي ولدها الـ O/R Designer وليس قاعدة البيانات مباشرة .<br />
في المرحلة التالية من المعالج ، اختر الفئة Customer كما بالصورة التالية :</p>
<div>
<div><a href="http://www.vb4arab.com/vb/uploaded/486/01249359558.png" target="_blank"><img src="http://www.vb4arab.com/vb/uploaded/486/01249359558.png" border="0" alt="" /></a></div>
</div>
<p>قم بعدها بإنهاء المعالج بالخيار Finish مباشرة ، الآن ستظهر كل حقول الجدول Customer على شكل فئة وخصائص تابعة لها وكذلك فئة فرعية بالإسم Orders وهي تمثل الجدول Orders التابع للجدول Customer بعلاقة من النوع One-to-Many كما بالشكل التالي :</p>
<div>
<div><img src="http://www.vb4arab.com/vb/uploaded/486/11249359558.png" alt="" /></div>
</div>
<p>يمكنك الان التعامل مع تلك الفئات مباشرة مثلما عملنا مع Dataset في مرة الماضية ، حيث قم بسحب الفئة customer إلى النافذة على شكل Details ، ثم قم بسحب الجدول Orders التابع لها ايضا إلى النافذة ، هنا سنحتاج إلى خطوة اضافية بسيطة وهي تعبئة الفئة Customer بالبيانات ، حيث ان الفئة الحالية ستكون وكأنها مجرد مخطط لا اكثر نستخدمه في انشاء الادوات والربط بينها بسهولة ، توجه إلى محرر الاكواد واكتب الكود التالي :</p>
<table border="1" cellspacing="0" cellpadding="2" width="500">
<tbody>
<tr>
<td dir="ltr" width="498" valign="top">
<div><span style="color:#0000ff;">Public</span><span style="color:#808080;"> </span><span style="color:#0000ff;">Class</span><span style="color:#808080;"> </span><span style="color:#000000;">Form1</span><span style="color:#808080;"><br />
    </span><span style="color:#0000ff;">Dim</span><span style="color:#808080;"> </span><span style="color:#000000;">db</span><span style="color:#808080;"> </span><span style="color:#0000ff;">As</span><span style="color:#808080;"> </span><span style="color:#0000ff;">New</span><span style="color:#808080;"> </span><span style="color:#000000;">CustomerOrdersDataContext</span><span style="color:#808080;"></p>
<p>    </span><span style="color:#0000ff;">Private</span><span style="color:#808080;"> </span><span style="color:#0000ff;">Sub</span><span style="color:#808080;"> </span><span style="color:#000000;">Form1_Load(</span><span style="color:#0000ff;">ByVal</span><span style="color:#808080;"> </span><span style="color:#000000;">sender</span><span style="color:#808080;"> </span><span style="color:#0000ff;">As</span><span style="color:#808080;"> </span><span style="color:#000000;">System.</span><span style="color:#0000ff;">Object</span><span style="color:#000000;">,</span><span style="color:#808080;"> </span><span style="color:#0000ff;">ByVal</span><span style="color:#808080;"> </span><span style="color:#000000;">e</span><span style="color:#808080;"> </span><span style="color:#0000ff;">As</span><span style="color:#808080;"> </span><span style="color:#000000;">_</span><span style="color:#808080;"> <br />
</span><span style="color:#000000;">System.</span><span style="color:#2b91af;">EventArgs</span><span style="color:#000000;">)</span><span style="color:#808080;"> </span><span style="color:#0000ff;">Handles</span><span style="color:#808080;"> </span><span style="color:#0000ff;">MyBase</span><span style="color:#000000;">.Load</span><span style="color:#808080;"><br />
        </span><span style="color:#0000ff;">Me</span><span style="color:#000000;">.CustomerBindingSource.DataSource</span><span style="color:#808080;"> </span><span style="color:#0000ff;">=</span><span style="color:#808080;"> </span><span style="color:#000000;">db.Customers</span><span style="color:#808080;"></p>
<p>    </span><span style="color:#0000ff;">End</span><span style="color:#808080;"> </span><span style="color:#0000ff;">Sub</span><span style="color:#808080;"></p>
<p>    </span><span style="color:#0000ff;">Private</span><span style="color:#808080;"> </span><span style="color:#0000ff;">Sub</span><span style="color:#808080;"> </span><span style="color:#000000;">CustomerBindingNavigatorSaveItem_Click(</span><span style="color:#0000ff;">ByVal</span><span style="color:#808080;"> </span><span style="color:#000000;">sender</span><span style="color:#808080;"> </span><span style="color:#0000ff;">As</span><span style="color:#808080;"> </span><span style="color:#000000;">_</span><span style="color:#808080;"> <br />
</span><span style="color:#000000;">System.</span><span style="color:#0000ff;">Object</span><span style="color:#000000;">,</span><span style="color:#808080;"> </span><span style="color:#0000ff;">ByVal</span><span style="color:#808080;"> </span><span style="color:#000000;">e</span><span style="color:#808080;"> </span><span style="color:#0000ff;">As</span><span style="color:#808080;"> </span><span style="color:#000000;">System.</span><span style="color:#2b91af;">EventArgs</span><span style="color:#000000;">)</span><span style="color:#808080;"> </span><span style="color:#0000ff;">Handles</span><span style="color:#808080;"> _ </span><span style="color:#000000;">CustomerBindingNavigatorSaveItem.Click</span><span style="color:#808080;"><br />
        </span><span style="color:#0000ff;">Me</span><span style="color:#000000;">.CustomerBindingSource.EndEdit()</span><span style="color:#808080;"><br />
        </span><span style="color:#0000ff;">Me</span><span style="color:#000000;">.db.SubmitChanges()</span><span style="color:#808080;"><br />
    </span><span style="color:#0000ff;">End</span><span style="color:#808080;"> </span><span style="color:#0000ff;">Sub</span><span style="color:#808080;"><br />
</span><span style="color:#0000ff;">End</span><span style="color:#808080;"> </span><span style="color:#0000ff;">Class</span></div>
</td>
</tr>
</tbody>
</table>
<p> </p>
<p><span style="font-size:small;"><span style="font-family:Times New Roman;">الكائن db يمكنك اعتباره ممثل لجداول قاعدة البيانات الموجودة في الـ O/R Designer ويمكنننا من خلاله الوصول إلى الفئات التابعة له ( المقابلة للجداول ) والتحكم بها كما سنرى ،</span></span></p>
<p><span style="font-size:small;"><span style="font-family:Times New Roman;">في الحدث form_load نقوم بإسناد الفئة db.Customers لتكون هي مصد البيانات في الـ CustomersBindingSource ، وفي حدث </span></span><span style="font-family:Courier New;">CustomerBindingNavigatorSaveItem_Click</span><span style="font-size:small;"><span style="font-family:Times New Roman;"> الذي يتم تفجيره بمجرد نقر زر الحفظ نستخدم ذات الكائن ليقوم بإرسال كل التغييرات التي طرأت على البيانات سواءا كانت هذه التغييرات اضافة ، حذف او حتى تعديل بسطر واحد فقط !</span></span></p>
<p><span style="font-size:small;"><span style="font-family:Times New Roman;">بهذا نكون جاهزين لتشغيل التطبيق وتجربة النموذج الجديد !</span></span></p>
<p><span style="font-family:Times New Roman;"><span style="font-size:medium;"><span style="color:#0000ff;"><strong>بناء نموذج من نوع Lookup List :</strong></span></span></span><br />
<span style="font-size:small;"><span style="font-family:Times New Roman;">لا اعتقد انك بحاجه إلى اعادة مجموعة من الاسطر كتبناها في حديثنا عن تطوير نافذة من النوع Lookup List باستخدام dataset ولا اعتقد ايضا انك بحاجه إلى اعادة كتابة سطرين صغيرين كتبناهما قبل حوالي 10 اسطر ! لذلك سأكتفي هنا بعرض المثال مباشرة .</span></span> <!-- / message --><!-- sig --></p>
Posted in تقنية عامة  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/alnabhani.wordpress.com/139/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/alnabhani.wordpress.com/139/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/alnabhani.wordpress.com/139/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/alnabhani.wordpress.com/139/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/alnabhani.wordpress.com/139/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/alnabhani.wordpress.com/139/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/alnabhani.wordpress.com/139/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/alnabhani.wordpress.com/139/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/alnabhani.wordpress.com/139/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/alnabhani.wordpress.com/139/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=alnabhani.wordpress.com&blog=454111&post=139&subd=alnabhani&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://alnabhani.wordpress.com/2009/08/04/2-%d8%a7%d8%b3%d8%aa%d8%ae%d8%af%d8%a7%d9%85-%d9%85%d8%b2%d9%88%d8%af-linq-to-sql/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="" medium="image">
			<media:title type="html">alnabhani</media:title>
		</media:content>

		<media:content url="http://www.vb4arab.com/vb/uploaded/486/31249359558.png" medium="image" />

		<media:content url="http://www.vb4arab.com/vb/uploaded/486/21249359558.png" medium="image" />

		<media:content url="http://www.vb4arab.com/vb/uploaded/486/01249359558.png" medium="image" />

		<media:content url="http://www.vb4arab.com/vb/uploaded/486/11249359558.png" medium="image" />
	</item>
		<item>
		<title>Master Details &#8211; الجزء الثاني : استخدام Dataset</title>
		<link>http://alnabhani.wordpress.com/2009/07/31/master-details-%d8%a7%d9%84%d8%ac%d8%b2%d8%a1-%d8%a7%d9%84%d8%ab%d8%a7%d9%86%d9%8a-%d8%a7%d8%b3%d8%aa%d8%ae%d8%af%d8%a7%d9%85-dataset/</link>
		<comments>http://alnabhani.wordpress.com/2009/07/31/master-details-%d8%a7%d9%84%d8%ac%d8%b2%d8%a1-%d8%a7%d9%84%d8%ab%d8%a7%d9%86%d9%8a-%d8%a7%d8%b3%d8%aa%d8%ae%d8%af%d8%a7%d9%85-dataset/#comments</comments>
		<pubDate>Fri, 31 Jul 2009 11:35:00 +0000</pubDate>
		<dc:creator>alnabhani</dc:creator>
				<category><![CDATA[برمجة قواعد البيانات ADO.NET]]></category>
		<category><![CDATA[ado.net]]></category>
		<category><![CDATA[dataset]]></category>
		<category><![CDATA[master details]]></category>

		<guid isPermaLink="false">http://alnabhani.wordpress.com/2009/07/31/master-details-%d8%a7%d9%84%d8%ac%d8%b2%d8%a1-%d8%a7%d9%84%d8%ab%d8%a7%d9%86%d9%8a-%d8%a7%d8%b3%d8%aa%d8%ae%d8%af%d8%a7%d9%85-dataset/</guid>
		<description><![CDATA[1- استخدام الـ Dataset :
سافترض بانك تعرف كيفية اضافة مصادر البيانات فلن اضع صورا هنا ، سنقوم اولا باضافة مصدر البيانات من خلال القائمة Data &#124; Add New Data Source ومن هناك نحدد قاعدة البيانات Northwind ونختار الجدولين Customers و Orders فقط ثم ننهي المعالج .
عمل الـ Full Details Form :
نتوجه بعدها إلى النافذة Form1 [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=alnabhani.wordpress.com&blog=454111&post=138&subd=alnabhani&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><h1>1- استخدام الـ Dataset :</h1>
<p>سافترض بانك تعرف كيفية اضافة مصادر البيانات فلن اضع صورا هنا ، سنقوم اولا باضافة مصدر البيانات من خلال القائمة Data | Add New Data Source ومن هناك نحدد قاعدة البيانات Northwind ونختار الجدولين Customers و Orders فقط ثم ننهي المعالج .</p>
<h5>عمل الـ Full Details Form :</h5>
<p>نتوجه بعدها إلى النافذة Form1 لنقوم بالعمل عليها ، وارجو منكم التركيز جيدا هنا .</p>
<p>1- توجه إلى القائمة Data | Show Data Sources او اضغط على shift+alt+d ستظهر لك النافذة بالشكل التالي :</p>
<p>&#160;</p>
<p><img src="http://www.vb4arab.com/vb/uploaded/486/01249038154.png" /> </p>
<p>لاحظ من هناك وجود الجدولين Customers و Orders ، ينبثق من كل منهما الحقول التابعة لهما والميزة هنا هو امكانيه اختيار الاداة التي يتم عرض بيانات الحقل بها ، حتى الجدول نفسه يمكن تحديد ما اذا كنت تود عرضه بطريقة الجدول Grid او التفاصيل details .</p>
<p>من اهم الامور هنا هو وجود الجداول المتربطة بشكل متداخل ، فلاحظ من الصورة السابقة وجود الجدول Orders مرتين ، الاولى بشكل تابع للجدول Customers والثانية بشكل مستقل عنه ، تبعية الجدول Orders للجدول Customers من خلال العلاقة التي بينهما ( One-to-Many ) يعني امكانيه عرض السجلات التابعة لكل سجل بشكل سهل جدا . هذا ما سنشاهده بعد قليل فلا تخف.</p>
<p>قم بالضغط على الجدول Customers وستنبثق لك قائمة صغيرة لتحدد طريقة العرض اختر منها details كما بالشكل التالي :</p>
<p>&#160;</p>
<p>&#160;<img src="http://www.vb4arab.com/vb/uploaded/486/01249039340.png" /> </p>
<p>الآن الخطوة الاكثر اثارة واهمية ، وهي سحب الجدول Custometrs إلى النافذة form1 وتركه هناك ، سيقوم Visual Studio بتوليد كل الادوات والاكواد المطلوبة لعرض البيانات وربطها والتنقل بينها &#8230; الخ كما بالصورة التالية :</p>
<p><img src="http://www.vb4arab.com/vb/uploaded/486/01249039561.png" /> </p>
<p>لو قمت بتشغيل التطبيق الآن ، ستلاحظ ظهور البيانات بشكل جميل ومرتب مع امكانية التنقل بين السجلات بسهولة ، فضلا عن امكانيه الاضافة والحذف والحفظ ايضا .</p>
<p>لم ينته عملنا بعد ، فنحن نريد اضافة الجدول Orders التابع للجدول Customers ، وارجو ان لا تخلط هنا مع الجدول Orders المستقل لأنه لن يفيدنا ، لذلك قم بسحل الجدول Orders الفرعي إلى النافذة ايضا وشاهد النتيجة :</p>
<p><img src="http://www.vb4arab.com/vb/uploaded/486/01249039636.png" width="492" height="480" /> </p>
<p>لو قمت الان بتجربة البرنامج ، ستجده يعمل بالشكل المطلوب تماما ، فبمجرد عرض سجل من الجدول customers في الاعلى ، يتم عرض السجلات المرتبطة به من الجدول Orders مباشرة في الاداة DataGrid في الاسفل مباشرة .</p>
<p>اذا كنت تستخدم الاصدار 2008 فقد اتممت كل الامور الضرورية المطلوبة ، اما في الاصدار 2005 و .net framework 2.0 فأنت بحاجه إلى اضافة بعض السطور في كود الحفظ من الـ BindingNavigator فهنا يتم تحديث كل جدول على حده للأسف ، لذلك ستجد كودا مثل :</p>
<table border="1" cellspacing="0" cellpadding="2" width="500">
<tbody>
<tr>
<td dir="ltr" valign="top" width="500">
<div class="code"><font color="#0000ff">Me</font><font color="#000000">.Validate()</font><font color="#808080">             <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; </font><font color="#0000ff">Me</font><font color="#000000">.CustomersBindingSource.EndEdit()</font><font color="#808080">             <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; </font><font color="#0000ff">Me</font><font color="#000000">.CustomersTableAdapter.Update(CustomerOrdersDataset.Customers)</font> </div>
</td>
</tr>
</tbody>
</table>
<p>وهذا يعني تحديث بيانات الجدول Customers فقط دون الجدول Orders المرتبط به ، لذلك اضف بعض السطور ليصبح الكود النهائي بالصورة التالية :</p>
<table border="1" cellspacing="0" cellpadding="2" width="500">
<tbody>
<tr>
<td dir="ltr" valign="top" width="500">
<div class="code"><font color="#0000ff">Me</font><font color="#000000">.Validate()</font><font color="#808080">             <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; </font><font color="#0000ff">Me</font><font color="#000000">.CustomersBindingSource.EndEdit()</font><font color="#808080">             <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; </font><font color="#0000ff">Me</font><font color="#000000">.CustomersTableAdapter.Update(CustomerOrdersDataset.Customers)</font><font color="#808080">             <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; </font><font color="#0000ff">Me</font><font color="#000000">.OrdersBindingSource.EndEdit()</font><font color="#808080">             <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; </font><font color="#0000ff">Me</font><font color="#000000">.OrdersTableAdapter.Update(CustomerOrdersDataset.Orders)</font> </div>
</td>
</tr>
</tbody>
</table>
</p>
<p>بينما في الاصدارات الاحدث من اطار العمل وكذلك فيجوال ستوديو ، يتم توليد الفئة TableAdapterManager يقوم بإدارة كل الكائنات من النوع tableAdapter والعمل عليها دفعة واحدة ! فكود الحفظ سيكون مولدا تلقائيا بالشكل التالي :</p>
<table border="1" cellspacing="0" cellpadding="2" width="500">
<tbody>
<tr>
<td dir="ltr" valign="top" width="500">
<div class="code"><font color="#0000ff">Private</font><font color="#808080">&#160;</font><font color="#0000ff">Sub</font><font color="#808080">&#160;</font><font color="#000000">CustomersBindingNavigatorSaveItem_Click(</font><font color="#0000ff">ByVal</font><font color="#808080">&#160;</font><font color="#000000">sender</font><font color="#808080">&#160;</font><font color="#0000ff">As</font><font color="#808080">&#160;</font><font color="#000000">System.</font><font color="#0000ff">Object</font><font color="#000000">,</font><font color="#808080">&#160;</font><font color="#0000ff">ByVal</font><font color="#808080">&#160;</font><font color="#000000">e</font><font color="#808080">&#160;</font><font color="#0000ff">As</font><font color="#808080">&#160;</font><font color="#000000">System.</font><font color="#2b91af">EventArgs</font><font color="#000000">)</font><font color="#808080">&#160;</font><font color="#0000ff">Handles</font><font color="#808080"> _</font></div>
<div class="code"><font color="#000000">CustomersBindingNavigatorSaveItem.Click</font><font color="#808080">             <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; </font><font color="#0000ff">Me</font><font color="#000000">.Validate()</font><font color="#808080">             <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; </font><font color="#0000ff">Me</font><font color="#000000">.CustomersBindingSource.EndEdit()</font><font color="#808080">             </p>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160; </font><font color="#0000ff">Me</font><font color="#000000">.TableAdapterManager.UpdateAll(</font><font color="#0000ff">Me</font><font color="#000000">.CustomerOrdersDataset)</font><font color="#808080">             </p>
<p>&#160;&#160;&#160; </font><font color="#0000ff">End</font><font color="#808080">&#160;</font><font color="#0000ff">Sub</font> </div>
</td>
</tr>
</tbody>
</table>
<p>حركة اخيرة احبها في هذا النوع من النوافذ وهو استخدام عجلة الفأرة MouseWheel للانتقال بين السجلات حيث نضيف الكود التالي في حدث الـ MouseWheel التابع للنافذة Form مباشرة :</p>
<p>&#160;</p>
<table border="1" cellspacing="0" cellpadding="2" width="500">
<tbody>
<tr>
<td dir="ltr" valign="top" width="500">
<div class="code"><font color="#0000ff">Private</font><font color="#808080">&#160;</font><font color="#0000ff">Sub</font><font color="#808080">&#160;</font><font color="#000000">Form1_MouseWheel(</font><font color="#0000ff">ByVal</font><font color="#808080">&#160;</font><font color="#000000">sender</font><font color="#808080">&#160;</font><font color="#0000ff">As</font><font color="#808080">&#160;</font><font color="#0000ff">Object</font><font color="#000000">,</font><font color="#808080">&#160;</font><font color="#0000ff">ByVal</font><font color="#808080">&#160;</font><font color="#000000">e</font><font color="#808080">&#160;</font><font color="#0000ff">As</font><font color="#808080">&#160;</font><font color="#000000">System.Windows.Forms.MouseEventArgs)</font><font color="#808080">&#160;&#160; </font><font color="#0000ff">Handles </font><font color="#0000ff">Me</font><font color="#000000">.MouseWheel</font><font color="#808080">             <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; </font><font color="#0000ff">If</font><font color="#808080">&#160;</font><font color="#000000">e.Delta</font><font color="#808080">&#160;</font><font color="#000000">&gt;</font><font color="#808080">&#160;</font><font color="#800000">0</font><font color="#808080">&#160;</font><font color="#0000ff">Then</font><font color="#808080">             <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; </font><font color="#0000ff">Me</font><font color="#000000">.CustomersBindingSource.MovePrevious()</font><font color="#808080">             <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; </font><font color="#0000ff">ElseIf</font><font color="#808080">&#160;</font><font color="#000000">e.Delta</font><font color="#808080">&#160;</font><font color="#000000">&lt;</font><font color="#808080">&#160;</font><font color="#800000">0</font><font color="#808080">&#160;</font><font color="#0000ff">Then</font><font color="#808080">             <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; </font><font color="#0000ff">Me</font><font color="#000000">.CustomersBindingSource.MoveNext()</font><font color="#808080">             <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; </font><font color="#0000ff">End</font><font color="#808080">&#160;</font><font color="#0000ff">If</font><font color="#808080">             <br />&#160;&#160;&#160; </font><font color="#0000ff">End</font><font color="#808080">&#160;</font><font color="#0000ff">Sub</font> </div>
</td>
</tr>
</tbody>
</table>
<p>بهذا نكون قد انهينا نافذة من النوع Detail view .</p>
<h2>بناء نافذة من النوع Lookup :</h2>
<p>هنا قم بإضافة نافذة جديدة فارغة إلى مشروعك ، وتوجه إلى نافذة الـ Datasources وحدد الجدول Customers وقم بتحديد النوع None لكل الحقول ، فلا نريد عرض سوى حقل واحد وهو ContactTitle حيث نريد عرض اسم الـ contact فقط ، وبالنسبة لهذا الحقل ، اختر الاداة ListBox :</p>
<p>&#160;</p>
<p><img src="http://www.vb4arab.com/vb/uploaded/486/01249039679.png" /> </p>
<p>الآن قم بسحب الجدول customers عن بكرة أبيه إلى النافذة Form ، ستلاحظ توليد الـ BindingNavigator وكل المكونات الاخرى ، وتوليد اداة ListBox فارغة ، قم بالنقر في الزر العلوي منها كما بالشكل التالي :</p>
<p><img src="http://www.vb4arab.com/vb/uploaded/486/01249039794.png" /> </p>
<p>&#160;</p>
<p>قم بتفعيل الخيار Use data bound items ، وستتغير تلك النافذة الصغيرة لتظهر عدة خيارات اضافية بها ، يهمنا منها الخاصية Datasource ، اختر منها CustomerBindingSource كما بالشكل التالي :</p>
<p><img src="http://www.vb4arab.com/vb/uploaded/486/01249039856.png" /> </p>
<p>&#160;</p>
<p>وبالنسبة للخاصية DisplayMember اختر الحقل ContactName التابع للـ customerBindingSource دون غيره :</p>
<p><img src="http://www.vb4arab.com/vb/uploaded/486/01249039906.png" /> </p>
<p>&#160;</p>
<p>الآن قم بتعيين قيمة الخاصية dock التابعة للاداة Listbox لتكون Left حيث اننا نود عرضها بالجانب الايسر في هذه الحالة – وفي حالة كون التطبيق باللغة العربية اجعله Right لاتنسى رجاءا ! – بعدها توجه مرة اخرى إلى النافذة DataSources وقم بسحب الجدول Orders الفرعي – التابع لـ Customers – إلى النافذة مباشرة وقم بضبط الخاصية Dock لها لتكون fill ، شغل بعدها البرنامج مباشرة وشاهد النتيجة بنفسك :</p>
<p><a href="http://www.vb4arab.com/vb/uploaded/486/01249040024.png" target="_blank"><img src="http://www.vb4arab.com/vb/uploaded/486/01249040024.png" width="496" height="335" /></a> </p>
<p>&#160;</p>
<p>حيث يظهر لك في الاداة ListBox الحقل ContactName وبمجرد اختيار احد القيم من هناك يتم عرض البيانات الفرعية التابعة له من الجهة اليمنى في الاداة DataGridView .</p>
<p>تبقى فكرة الحفظ نفسها التي طبقناها في المرة السابقة مع النوع الاخر من النوافذ وذلك في حالة كونك تستخدم VS2005,.net 2.0 .</p>
<p>بهذا نكون انتهينا من عرض طريقة استخدام الـ Dataset في انشاء نوافذ تعرض البيانات بطريقة Master Details .</p>
Posted in برمجة قواعد البيانات ADO.NET Tagged: ado.net, dataset, master details <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/alnabhani.wordpress.com/138/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/alnabhani.wordpress.com/138/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/alnabhani.wordpress.com/138/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/alnabhani.wordpress.com/138/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/alnabhani.wordpress.com/138/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/alnabhani.wordpress.com/138/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/alnabhani.wordpress.com/138/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/alnabhani.wordpress.com/138/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/alnabhani.wordpress.com/138/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/alnabhani.wordpress.com/138/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=alnabhani.wordpress.com&blog=454111&post=138&subd=alnabhani&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://alnabhani.wordpress.com/2009/07/31/master-details-%d8%a7%d9%84%d8%ac%d8%b2%d8%a1-%d8%a7%d9%84%d8%ab%d8%a7%d9%86%d9%8a-%d8%a7%d8%b3%d8%aa%d8%ae%d8%af%d8%a7%d9%85-dataset/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="" medium="image">
			<media:title type="html">alnabhani</media:title>
		</media:content>

		<media:content url="http://www.vb4arab.com/vb/uploaded/486/01249038154.png" medium="image" />

		<media:content url="http://www.vb4arab.com/vb/uploaded/486/01249039340.png" medium="image" />

		<media:content url="http://www.vb4arab.com/vb/uploaded/486/01249039561.png" medium="image" />

		<media:content url="http://www.vb4arab.com/vb/uploaded/486/01249039636.png" medium="image" />

		<media:content url="http://www.vb4arab.com/vb/uploaded/486/01249039679.png" medium="image" />

		<media:content url="http://www.vb4arab.com/vb/uploaded/486/01249039794.png" medium="image" />

		<media:content url="http://www.vb4arab.com/vb/uploaded/486/01249039856.png" medium="image" />

		<media:content url="http://www.vb4arab.com/vb/uploaded/486/01249039906.png" medium="image" />

		<media:content url="http://www.vb4arab.com/vb/uploaded/486/01249040024.png" medium="image" />
	</item>
	</channel>
</rss>