در بخشهای قبلی در مورد کلاس ObjectContext صحبت کردیم .وقتی ما یک مدل طراحی می کنیم این مدل ما کلاسی دارد که از کلاس ObjectContext ارث بری می کند .کلاس objectContext در خصوصیات خود به کلاس دیگری به نام ObjectStateManager دسترسی دارد . این کلاس ObjectStateManager به طور مستقیم استفاده نمی شود و باید حتما از طریق کلاس ObjectContext به آن دسترسی پیدا کنیم . کلاس ObjectStateManager مدیریت عملیات تغییر ، حذف و ایجاد اشیا کلاس را انجام می دهد .
نکته مهم این است که برای هر شی ObjectContext فقط یک شی ObjectStateManager ایجاد می شود .در واقع این دو کلاس در تناظر یک به یک با یکدیگر هستند .علاوه بر این کلاس ObjectContext برای هر کدام از موجودیتهای خود یعنی Entity های موجود در خود یک کلاس ObjectStateEntry نیاز دارد .
به شکل زیر دقت کنید :
شکل بالا تصویری دقیقتر از یک مدل کلاس و کلاسهای مطرح شده در بالا است ، تصویر بالا بر دو بخش است . بخش فوقانی تصویر نمایی از یک مدل کلاس است اما تصویر پایین در برگیرنده همان کلاسهایی که در بالا ذکر شد.
وقتی یک مدل کلاس ایجاد می شود داده های این مدل در cash قرار می گیرند cash مربوط به کل مدل کلاس ما همان شی ObjectStateManager است . این در واقع ظرفی است برای تماس موجویتهای دیگر مدل کلاس ما . همچنین هر کدام از موجودیتها Entity ها در cash متناظر خود که همان کلاس ObjectStateEntry لود می شود . در شکل بالا می بینیم که برای موجودیت هر جدول و کلاس ما ، یک Cash با نوع کلاس ObjectStateEntry ایجاد شده است . این کلاس دارای چند آیتم مهم است که در زیر مختصرا ذکر می کنم .
1-EntityState در واقع حالت یک موجودیت را بیان می کند و مقادیر زیر را می گیرد .
Detached : شی وجود دارد اما قابل ردیابی نیست . در واقع موجودیت ایجاد شده اما بعدا اتصال آن با شی ObjectContext قطع می شود.
Unchanged : شی ما قابلیت تغییر را ندارد.
Added : در واقع شی موجودیت به کلاس ObjectContext اضافه می شود .
Deleted : شی موجودیت از کلاس objectContext حذف می شود .
Modified : برخی از مقادیر شی ما دچار تغییر شده اند.
2-Entity : همانطور که در شکل بالا می بینید نشان دهنده شی یا موجودیت مرتبط با ObjectStateEntry
3-EntityKey : کلید ارجاع و منحصر به فرد کلاس ها است که برای هر کدام از اشیا باید منحصر به فرد باشد .
4- original value : وقتی برای اولین با یک موجودیت ایجاد می شود یک تصویر اولیه از آن در cash ایجاد می شود که شامل مقادیر اصلی همان موجودیت است .
5-current value : وقتی مقادیر موجویت در cash تغییر پیدا کنند . قبل از انکه به بانک اطلاعاتی منتقل شوند .مقادیر فعلی را نشان می دهد که در cash قرار دارند .
مثال زیر مفهوم ، تعاریف بالا را و فرق مقادیر اصلی و فعلی را نمایش میدهد.این مثال بر پایه همان مدل کلاس مثالهای قبل تدوین شده است .
int orderId = 43680;
using (AdventureWorksEntities context =
new AdventureWorksEntities())
{
var order = (from o in context.SalesOrderHeaders
where o.SalesOrderID == orderId
select o).First();
// Get ObjectStateEntry from EntityKey.
ObjectStateEntry stateEntry =
context.ObjectStateManager.GetObjectStateEntry(((IEntityWithKey)order).EntityKey);
//Get the current value of SalesOrderHeader.PurchaseOrderNumber.
CurrentValueRecord rec1 = stateEntry.CurrentValues;
string oldPurchaseOrderNumber =
(string)rec1.GetValue(rec1.GetOrdinal("PurchaseOrderNumber"));
//Change the value.
order.PurchaseOrderNumber = "12345";
string newPurchaseOrderNumber =
(string)rec1.GetValue(rec1.GetOrdinal("PurchaseOrderNumber"));
// Get the modified properties.
IEnumerable<string> modifiedFields = stateEntry.GetModifiedProperties();
foreach (string s in modifiedFields) Console.WriteLine("Modified field name: {0}\n Old Value: {1}\n New Value: {2}",s, oldPurchaseOrderNumber, newPurchaseOrderNumber);
// Get the Entity that is associated with this ObjectStateEntry.
SalesOrderHeader associatedEnity = (SalesOrderHeader)stateEntry.Entity;
Console.WriteLine("Associated Enity's ID: {0}", associatedEnity.SalesOrderID);
Console.ReadKey();
}
ادامه دارد ...
Entity SQL part 3
Using Entity SQL with the EntityClient provider
EntityClient یک ارایه دهنده ابزاری است برای ایجاد تعامل با مدل مفهومی داده ها است .این ارایه دهنده بسیار شبیه به ابزار SQLClient در ADO.Net است .اگر از قبل با SQLClient کار کرده باشید فراگیری EntityClient برای شما به مراتب ساده تر خواهد بود . در اینجا اشاره ای می کنم به مهمترین عناصر فضای نام EntityClient
1- EntityConnection : این شی بسیار شبیه به شی Sqlconnection میباشد . با این تفاوت که EntityClient شامل رشته اتصال به مدل داده ها است در حالیکه SqlConnection شامل رشته اتصال به بانک اطلاعاتی است .
2- ایجاد کویری EntityCommand
وقتی رشته اتصال با مدل داده ایجاد می شود ، پس از آن شما برای اجرای کویری خود بر اساس مدل داده ها ، نیاز به شی EntityCommand دارید ، شما به واسطه این شی می توانید انواع کویریها را بر روی مدل داده ها اجرا کنید .
3-پیمایش داده ها EntityDataRedear
اگر شما بخواهید داده های خود را از شی EntityCommand را بصورت داده های فقط خواندنی و بصورت رکوردهای پیمایشی ایجاد کنید این شی کمک فراوانی به شما می کند .
اکنون بر اساس مدل داده های مثال قبل یک کویری جدید بر اساس EntityClient ایجاد می کنیم تا بهتر متوجه تفاوت این دو روش شویم .
ابتدا حتما فضای نام system.Data.EntityClient را حتما وارد کنید و سپس سورس زیر را اعمال کنید .
var firstname = "";
var lastname = "";
using (EntityConnection conn = new EntityConnection("name = AdventureWorksEntities"))
{
conn.Open();
var query = "SELECT p.FirstName, p.LastName FROM AdventureWorksEntities.Contacts " +
" AS p Order by p.FirstName";
EntityCommand cmd = conn.CreateCommand();
cmd.CommandText = query;
using (EntityDataReader rdr= cmd.ExecuteReader(System.Data.CommandBehavior.SequentialAccess))
{
while (rdr.Read())
{
firstname = rdr.GetString(0);
lastname = rdr.GetString(1);
Console.WriteLine(string.Format("{0} {1}", firstname, lastname));
}
}
conn.Close();
}
ادامه دارد...
سال 89 برای من سالی بسیار متفاوت بود . همانند دیگر سالها با فراز و نشیب فراوانی بود . اما مهمترین نکته ای که در این سال برای من حاصل شد . عرصه وبلاگ نویسی بود
تا سالها قبل فکر می کردم وبلاگ نویسی صرفا اتلاف وقت است اما بعدها متوجه اهمیت آن شدم لذا از خرداد ماه بصورت جدی تری وارد این عرصه شدم نمی خواهم ادعا کنم که خیلی مفید بودم . اما می توانم بگویم تلاش کردم مفید باشم .در اینجا از تمام دوستانی که بحث آموزشی را پی گیری می کنند پوزش می طلبم که مجبورم بقیه بحث را به سال آینده موکول کنم .اما از مهمترین دستاوردهای من درعرصه فضای مجازی را باید در آشنا شدن من با دوستان عزیزی بدانم که به حق باید اعتراف کنم که در تغییر نگرش من و راه زندگی من تاثیر مثبت و عالی داشتند . یادمان نرود که اگر از فضای مجازی در عصر جدید به خوبی استفاده کنیم می توانیم دوستان بسیار خوبی پیدا کنیم . که شاید در فضای واقعی مانند آنها را نداشته باشیم.البته این نکته را هم اضافه کنم که بنده این دوستان را تا الان در فضای فیزیکی ملاقات نکرده ام اما در فضای مجازی با آنها و نوشته های آنها آشنا شده ام . در زیر با ذکر سایتها نام افراد را برای سپاسگذاری هم ذکر خواهم کرد .
وبلاگ و سایت سازمانی
1-سایت انجمن متا : این سایت توسط آقایان کوکبی و شهباززاده و استاد بزرگوارم احسانی ایجاد شده . در این سایت تاکید بر تولید محتوی علمی و انجام کارهای گروهی است . دوستان تلاش می کنند که با سبکی متفاوت فرومی ایجاد کنند که تولید کننده علم باشد . هنوز در اول راه است اما تاکنون موفقیتهای فراوانی کسب کرده است . و از همه مهمتر روحیه انتقاد پذیری و تجربه عالی دوستان بسیار قابل تحسین است .جا دارد در اینجا صمیمانه از آنها تشکر کنم .از مهمترین کاربران این سایت خانم دلفان که در امور حسابداری و متفرقه می نویسند و خانم فیلسوفیا که در زمینه فلسفه مطالب جالبی دارن و آقای غیوری که متبحر در زمینه بازار های مالی و بورس و سیویلار که مهندس عمران هستند .البته بنده هم در این سایت در بخش کامپیوتر مطلب می نویسم .
2-وبلاگ بهساد : این وبلاگ از آن دسته وبلاگهای سازمانی است که توسط مجید آواژ اداره می شود . اگر چه این وبلاگ متعلق به یک شرکت است اما نوشته های گرانبها و از همه مهمتر اشتراک گذاری تجربیات عالی و ممتاز با دیگران از مهمترین امتیازات این وبلاگ است . شخصا هر وقت به اینترنت وصل می شوم حتما به این وبلاگ سر می زنم . تا از آخرین مطلب ممتاز آن بهره مند شوم .
3-وبلاگ رادمان : این وبلاگ توسط علی واحد اداره می شود . وبلاگی سازمانی متعلق به شرکت رادمان است . تجارب مدیریتی و نرم افزاری و از همه مهمتر مهندسی نرم افزار را شامل می شود .و بلاگی عالی که بنده مدیون مطالب بسیار خوب و آموزنده آن هستم . در این وبلاگ بیشتر با طعم مهندسی نرم افزار است . به قولی سرگذشت یک مهندس نرم افزار است . زیباترین و موثرترین مطلبی که من در این سایت مرا تحت تاثیر قرار داد "پیر برنامه ساز ، برنامه نویس پیر " توصیه می کنم . اگر برنامه نویس هستید حتما این مطلب زیبا را بخوانید .
4-وبلاگ ایده گستران : وبلاگ سازمانی که توسط دو نفر اداره می شود . وبلاگی است که دارای محتوای جالبی است همراه با تجربیات مفید گردانندان آن .
وبلاگهای شخصی
1-وبلاگ وحید نصیری : فکر نمی کنم این وبلاگ نیازی به معرفی داشته باشد . وبلاگی پر محتوا و دارای مطالب آموزنده و بسیار عالی است . آقای نصیری نویسنده چند کتاب هستند و مطالب وبلاگ ایشان واقعا پرمحتوا است . جا دارد که صمیمانه از زحمات ایشون تشکر کنم . البته با کمال تاسف اخیرا فیلتر شده است
2-وبلاگ افشار محبی : وبلاگی تخصصی و دارای مطالب خوب و مفید . علاوه بر مطالب تخصصی گاهی از تجربیات کاری و دغدغه های برنامه نویسان نیز مطالب جالبی می نویسند . جا دارد که صمیمانه از زحمات ایشون تشکر کنم
3-وبلاگ امیر مهرانی : واقعا مطالب این وبلاگ در روحیه من تاثیر گذار بود بخصوص مطالبی که در مورد برند و پرسنال برندینگ می نویسند بسیار خواندنی هستند .وبلاگی بسیار پر محتوا از فردی با تجربه در زمینه منابع انسانی و به تعبیری دیگر باید اعتراف کنم که در مسیر کاری راهنماییهای جالبی دارد که خواندن آنها را به همه توصیه می کنم . باز هم از ایشون بابت زحماتشون تشکر می کنم .
4-کاوه یزدانی نژاد : وبلاگ برنامه نویسی با تجربه که در کنار تجربه های برنامه نویسی و فنی از تجربیات کاری و مدیریتی هم مطالب جالبی می نویسند . اخیرا مطالب جالبی را از کتابها برایان تریسی و.. نوشته اند که خیلی مفید بود . علاوه بر آن تجربه های کاری ایشون نیز بسیار خواندنی و مفید است . از ایشون بابت زحماتشون تشکر می کنم .
5-سماموس : وبلاگ برنامه نویسی با تجربه و از همه مهمتر مهندسی نرم افزار است .نویسنده این وبلاگ آقای یوسف مهرداد هستند که از با تجربه های دنیای مهندسی نرم افزار هستند و از همه مهمتر نویسنده کتاب
(( روش کاربردی تحلیل نیازمندیهای نرم افزار )) هستند . کتابی است بسیار پر محتوا و مفید است . جا دارد از زحماتشون تشکر کنم .
6-فراسان : وبلاگی است در زمینه نرم افزار به اضافه تجربیات یک برنامه نویس است وبلاگی بسیار پر محتوا و آموزنده است .این وبلاگ توسط ایمان نعمتی اداره می شود که شامل مطالب بسیار جالبی است . البته با کمال تاسف اخیرا فیلتر شده است . جا دارد از زحماتشون تشکر کنم .
7-مهندس علی نوبر : وبلاگی است که بیشتر در زمینه های معماری سرویس گرا مطالب بسیار خوبی دارند . بیشتر مطالب وبلاگ در مورد معماری نرم افزار و تحلیل است . خواندن مطالب آن رابه همه توصیه می کنم از زحمات نویسنده این بلاگ هم تشکر می کنم .
8-مهندسی نرم افزار : وبلاگی در مورد مهندسی نرم افزار و از همه مهمتر الگوهای طراحی و کارهای تیمی مطالب بسیار مفیدی دارد . این وبلاگ توسط بهروز بختیاری اداره می شود که جا دارد از ایشون هم تشکر کنم . بابت مطالب بسیار خوب وبلاگ
9-دنیای چابک : اگر می خواهید با دنیای agile آشنا شوید این وبلاگ مطالب بسیار پر محتوایی دارد .این وبلاگ توسط اسد صفری اداره می شود . ایشون کتاب اسکرام و اکس پی ساده شده را ترجمه کرده اند و برای استفاده عموم در وبلاگ خود قرار داده است که می توانید آن را دانلود کنید و از مطالب پر محتوا آن بهره مند شوید . از ایشون هم بابت زحماتشون تشکر می کنم .
10-وبلاگ مسعود رمضانی : وبلاگی در زمینه برنامه نویسی است مطالب بسیار خوبی دارد . از ایشون هم بابت زحماتشون تشکر می کنم
11-پویا بلاگ : وبلاگی در زمینه مهندسی نرم افزار . نویسنده این وبلاگ به همراه استاد یوسف مهرداد کتاب
(( روش کاربردی تحلیل نیازمندیهای نرم افزار )) را تالیف کرده اند . از ایشون هم بابت زحماتشون تشکر می کنم .
اما سخن پایان . دنیای وبلاگ نویسی دنیای عجیبی است . افراد تجربیات خود را بدون هیچ توقعی در اختیار دیگران قرار می دهند . به قولی به اشتراک می گذارند . لازم دانستم تا آنجایی که در توانم هست اگر از نوشته فردی سودی برده ام حداقل از ایشون تشکر کنم . لذا اینجا از تمام وبلاگ نویسان ذکر شده در بالا باز هم بابت زحماتشون صمیمانه تشکر می کنم .و برای تمام آنها سالی پر بار از موفقیت آرزو می کنم .
پیروز و سربلند باشید .