با سلام.
چه طور چند spکه عملیات update را روی یک جدول انجام میدهند در domain service class را فراخوانی کنیم؟
مثلا با زدن دکمه های مختلف در اینترفیس هر کدام از sp ها صدا زده شود.
با سلام.
چه طور چند spکه عملیات update را روی یک جدول انجام میدهند در domain service class را فراخوانی کنیم؟
مثلا با زدن دکمه های مختلف در اینترفیس هر کدام از sp ها صدا زده شود.
سلام
1)ابتدا می بایست آن پروسیجر را به صورت تابع به Entity Model تان معرفی کنید:
به قسمت طراحی Entity تان بروید(بر روی فایل edmx در پروژه وب دوبار کلیک کنید) سپس در تب باز شده راست کلیک و Add->Function Import را بزنید و در پنجره باز شده پروسیجرتان را انتخاب و یک نام برای تابع Entity اش انتخاب کنید.
2)به Domain Service مربوطه بروید و متدی با هر نامی (ترجیحا نام پروسیجرتان ایجاد کنید) و ... در داخل آن متد با کدی شبیه کد زیر می توانید آن را اجرا کنید:
this.ObjectContext.MyProcedure(...);
3)حالا می توانید در کلاینت آن متد را صدا بزنید...
موفق باشید
من sp ها را فراخوانی کردم همه اجرا میشه ولی spهای از نوع selectکه در sql درست اجرا میدهد اینجا فقط یک رکورد بر می گردونه. نوع متد IQueryable تعریف کردم.و Ilist هم تعریف میکنم همین مشکل را دارد.راه حل چیه؟
این مشکل از Entity Framework نیست و از سرویس ها هم نیست به احتمال زیاد یا جوابی که select شما می خواهد یکی بیشتر نیست و یا در متدی که برای پروسیجرتان تعریف کردید کدی باعث این خطا شده...
اگر همچنان مشکل را دارید بهتر از کد sql پروسیجرتان را به همراه متدی که در Domain Service تان تعریف کردید را بگذارید...
ولی spرا در محیط sql ا جرا میکن درست جواب میدهد و چند رکورد برمیگرداند.اگر نوع متد را iqueryableتعریف کنم در اجرا این پیغام را می دهد.
the result of a query cannot be enumerated more than once.
و اگر از نوع ILISTتعریف کنم به ازای تمام رکورد هایی که sp در sqlبرمیگرداند اینجا رکورد اول تکرار میشود.(یعنی به ازای مثلا 5رکورد متفاوت 5بار رکورد اول را تکرار می کند).
من در sp یک select نوشتم که یک فانکشن به ازای هر رکورد فراخوانی میکند و چند فیلد دیگر از یک جدول-
و یک complex type هم براش تعریف کردم.
سوال:آیا همه ی فیلد هایی که spبرمیگرداند را باید درفایل metedata typeتعریف کنم یا فقط اعلام یک فیلد به عنوان کلید اصلی کافیست؟
با تشکر.
سوال:فیلد هایی که با عنوان Navigation propertiesدر انتهای جدول ها در مدل اضافه میشود،برای چیه؟
آیا میشه این فیلد ها را حذف کرد؟
سلام
ابتدا جواب سوال هاتون ->
اگر پروسیجرتان به جز entity های تولید شده بر می گرداند- باید یک metadata تعریف کنید در غیر اینصورت به خطا برخورد می کنید و WCF نمی تواند ComplexType شما را سریالی کندآیا همه ی فیلد هایی که sp برمیگرداند را باید درفایل metedata type تعریف کنم یا فقط اعلام یک فیلد به عنوان کلید اصلی کافیست؟
و تنها تعریف اون Metadata به WCF این را می فهماند و این که یک نوع دیتابیسی کلید داشته باشد یک باید است.
این خصیصه ها چیزی جز دستور select برای واکشی جدوال مرتبط به هم نیستندو معمولا کار ما را ساده تر می کنند...فیلد هایی که با عنوان Navigation propertiesدر انتهای جدول ها در مدل اضافه میشود،برای چیه؟
آیا میشه این فیلد ها را حذف کرد؟
من تا به حال حذفشان نکردم ولی در هر Update دوباره اضافه میشن و حذفشان مشکلاتی پیش خواهد آورد ولی سعی کنید ازشان استفاده کنید
چگونه مقادیر واکشی شده را در متدتان بر می گردانید؟ولی spرا در محیط sql ا جرا میکن درست جواب میدهد و چند رکورد برمیگرداند...
سلام .
با تشکر از جواب و لطفتون.
میشه توضیح بدهید که چطور از navigation propertise ها استفاده کرد؟
من برای واکشی اطلاعات از بانک فقط spهایی راکه نوشتم فراخوانی میکنم و از متد های سرویس استفاده نمیکنم چون این متد ها همه ی فیلد های جدول و navigation propertiseها را هم برمیگرداند.وفیلد ها قابل فیلتر نیست.آیا راه حلی وجود دارد؟
--
اگر فید هایی را از یک جدول حذف کنیم و model را update کنیم این فیلد ها حذف نمیشه و همچنین datasourse هم update نمیشه،چیکار باید کرد؟
--
من sp را اجرا کردم و در datagrid نمایش دادم بعد با damaindatasourse هم این کار را کردم،ولی بعد برای صفحه بندی اطلاعات یکdatapagerهم بایند کردم و pagesizeهم برای هر دو تعریف کردم ومتد را با true کردن loadاجرا کردم ولی همان خطایی را که گفتم داد.برای صفحه بندی اطلاعات متد را باید چطور فراخوانی کرد؟
سلام
مثلا اگر بین دو جدول TableOne و TableTwo به ترتیب رابطه یک به چند وجود داشته باشد در Entity ایجاد شده برای جدول TableOne شما یک Navigation Property با نام TableTwos دارید که بوسیله این خصیصه شما می تونید تمام TableTwo های مرتبط به رکورد فعلی جدول TableOne را حدف/آپدیت/واکشی/اضافه (با/بدون شرط) کنید.میشه توضیح بدهید که چطور از navigation propertise ها استفاده کرد؟
مثلا کد زیر اولین رکورد از TableTwo های مرتبط با اولین رکورد از جدول TableOne را بر می گردونه:
var tableTwo = this.ObjectContext.TableOnes.FirstOrDefault().Tabl eTwos.FirstOrDefault();
شما می توانید هر گونه ... را توسط خود EF انجام دهید و اینکار را بسیار ساده کرده اما اگر جداول بزرگ و حجم داده ها هم زیاد باشد استفاده از sp ها مناسب تر است(البته EF 4 قابلیت استفاده از گوئری های کامپایل شده را نیز اضافه کرده که ...)من برای واکشی اطلاعات از بانک فقط spهایی راکه نوشتم فراخوانی میکنم و از متد های سرویس استفاده نمیکنم چون این متد ها همه ی فیلد های جدول و navigation propertiseها را هم برمیگرداند.وفیلد ها قابل فیلتر نیست.آیا راه حلی وجود دارد؟
راه حل برای چی؟
فیلدهای حذف شده را پس از آپدیت فقط در ظاهر Entity Model تان می بینید و می توانید دستی حذفشان کنید(این یه باگ هست...)اگر فید هایی را از یک جدول حذف کنیم و model را update کنیم این فیلد ها حذف نمیشه و همچنین datasourse هم update نمیشه،چیکار باید کرد؟
این هم بدیهی است چون DataSource ای که می بینید تابع Domain Service تان هست و Domain Service هم از روی Entity تان تولید می شود(فیلد هایی را که نمی خواهید در هر دو حذف کنید)
کدام خطا؟...متد را با true کردن loadاجرا کردم ولی همان خطایی را که گفتم داد...
باید هر دو به یک منبع دیتا بایند شوند.برای مثال کدهای این صفحه را ببنید.برای صفحه بندی اطلاعات متد را باید چطور فراخوانی کرد؟
موفق باشید
متا سفانه لینکی که گذاشته بودید باز نشد.اگه میشه دوباره بزارید.
من از طریق domaindata sourseمتد را اجرا کردم و datapager و datagrid را به اون بایند کردم. ولی اجرا میکنم این خطا را میدهد
.the result of a query cannot be enumerated more than once
وقتی datapagerرا حذف میکنم datagrid رکورد ها را نمایش میدهد.
سلام
حدس من از خطای فوق اینه که یه جا در بایند کردن DataSource به DataGrid و DataPager یا هر دو باهم درخواست Query را می کنند یا DataGrid زودتر از DataPager این در خواست رو میده!the result of a query cannot be enumerated more than once
فقط یک حدس(البته یادم هست که قبلا با یه همچین خطایی مواجه شدم ولی یادم نیست چه طور برطرفش کردم !)
برای امتحان :
بایند هایی که در XAML به DataSource انجام گرفته را حذف کنید و در کد این کار را انجام دهید (یه کدی شبیه همان آدرس که دادم).
PagedCollectionView dataView = new PagedCollectionView(/* Your Enumerable Data */);
dtpPager.Source = dataView;
dtgGrid.ItemsSource = dataView;
و در مورد آن لینک هم مشکلی ندارد با IE هم امتحان کنید ولی چیز خاصی ندارد...
موفق باشید
سلام.
با تشکر از راهنمایی هاتون.
من این متد را در سرویس نوشته ام.
public IQueryable<showmanbae_spResult> showmanabeasli(int codedars, string mozue,int karbar_or_modeir)
{
return this.ObjectContext.showmanbae_sp(codedars, mozue, karbar_or_modeir).AsQueryable
}
با روشی که گفتید من چطور باید این متد را در pagecollectionview فراخوانی کنم.متاسفانه هر روشی را که امتحان کردم قبول نکرد.
با سلام
فقط کافی است نتیجه را به عنوان پارامتر به PagedCollectionView تان بدهید:
var spResult = yourDomainService.showmanabeasli(codedars, mozue, karbar_or_modeir);
var dataView = new PagedCollectionView(spResult);
dtpPager.Source = dataView;
dtgGrid.ItemsSource = dataView;
که dtpPager همان کنترلر pager و dtgGrid همان dataGrid تان است
موفق باشید
با سلام دوبارهممنونم که به سوال های من جواب میدهید.سوال:آیا در سیلورلایت
میشه از dllهایی مثل FarsiMsgBoxاستفاده کرد؟من از طریق add referenceخواستم این کار را انجام بدم اما خطا داد
سوال:من با فراخوانی یک sp که یک ستون را برمیگرداند میخواهم این ستون را
در comboboxنمایش دهم. من یک complex typeبرای این spساختم و این طور متد را فراخوانی کردم:bankContext combo = new
bankContext();
combo.Load(combo.retlistcourseQuery());
combodarse.ItemsSource=combo.retlistcourse_spResul ts;
اما در comboتک تک رکورد ها به این صورت اضافه میشود.مثلا:
retlistcourse_spResults:ریاضیات مهندسی یعنی retlistcourse_spResultsرا هم کنار فیلد ها اضافه میکند.برای حذف این عبارت من باید چیکار کنم؟
سوال:
درسیلورلایت چطور میشه از کنترل errorproviderسی شارپ استفاده کرد؟ من میخواهم در صورت خالی بودن یک textboxعلامت هشدار کنار
آن ظاهر شود.
سلام
نمیشه-و علت خطا اینه که آن dll تحت فریم ورک دات نت نوشته شده نه فریم ورک سیلورلات و این دو هر چند تا حدودی به هم شبیه اند ولی یکی نیستند.میشه از dllهایی مثل FarsiMsgBoxاستفاده کرد؟من از طریق add referenceخواستم این کار را انجام بدم اما خطا داد
لطفا کدهاتون را داخل تگ کد ( [CODE] ) بذارید...برای حذف این عبارت من باید چیکار کنم؟
یا باید برای آیتم های کامبو Template تعریف کنید یا خصیصه DisplyMemberPath را به نام خصیصه ای مرتبط در نتیجه Query تون قرار بدید...
مثلا :
<ComboBox Width="200" Height="23" x:Name="combobox" DisplayMemberPath="MyProperty" />
کلا در برنامه های تحت وب به این Validation گفته می شود.من میخواهم در صورت خالی بودن یک textboxعلامت هشدار کنار
آن ظاهر شود.
نگاهی به این لینک یا این بیندازید و ...
موفق باشید
با روشی که گفتید دوباره امتحان کردم ولی با این خطا ها مواجه شدم.نوع متد را به ienumerable تغییر دادم ولی همین خطا را داد.
Error4
The best overloaded method match for 'System.Windows.Data.PagedCollectionView.PagedColl ectionView(System.Collections.IEnumerable)'
has some invalid arguments D:\blend-project\btcknowledge\btcknowledge\page\Page1.xaml. cs
وخطای دوم
Error2
Argument 1: cannot convert from 'System.ServiceModel.DomainServices.Client.EntityQ uery<btcknowledge.Web.showmanbae_spResult>'
to 'System.Collections.IEnumerable' D:\blend-project\btcknowledge\btcknowledge\page\Page1.xaml. cs
سلام
خطاهای بسیار ساده و قابل فهمی هستند و اصلا ربطی سیلورلایت هم ندارن!
اولی گفته سازنده PagedCollectionView یک IEnumerable قبول می کند...
دومی هم گفته EntityQuery رو نمی تون به Enumerable تبدیل کنه...
پیشنهاد من اینه که شما اگر به نتیجه ی Query در کلاینت نیازی ندارید آن را به لیست تبدیل کنید و به کلاینت بفرستید
موفق باشید
سلام
تگ [code] را کجا باید استفاده کرد؟کد های سی
شارپ را در این تگ بنویسم.من این تگ را پیدا نکردم.
سوال:چطور میشه به یک سطر خاص از datagridدسترسی داشت؟خاصیتی مثل position در سی شارپ را اینجانداریم؟
متدی که در سرویس یک رکورد را بر میگرداند،من میخوام نتیجه ی این رکورد را در متغییری بریزم که به تک تک فیلد های این رکورددسترسی داشته باشم ، متغییر از نوع جدول که این رکورد را دارد تعریف میکنم،تبدیل نوع هم انجام میدم ولی خطا میدهدراه حل چیه؟
سلام
بر روی دکمه # کلیک کنید خودش تک را به متن اضافه می کند سپس کدتان را بین دو تگ قرار بدین...
با استفاده از خصیصه های SelectedItem و ItemsSource و ...چطور میشه به یک سطر خاص از datagridدسترسی داشت؟خاصیتی مثل position در سی شارپ را اینجانداریم؟
یک کلاس تعریف کنید و آن متغییرهای که می خواهید به صورت خصیصه تعریف کنید و سپس نتیجه کوئری را داخل آن کلاس بریزیدمن میخوام نتیجه ی این رکورد را در متغییری بریزم که به تک تک فیلد های این رکورددسترسی داشته باشم
موفق باشید
سلام
متاسفانه من هنوز موفق به صفحه بندی اطلاعات دریافتی از بانک نشدم،همان طور که گفتید
نوع متد را به Ilist تبدیل کردم و خروجی متد را به عنوان لیست فرستادم اما PagedCollectionViewاین را هم به عنوان ورودی قبول نمی کند و همان دو خطای قبلی
را میدهد.در MSDNپیدا کردم که با همین روش باید از datapagerو datagridاستفاده کرد ولی خروجی متد را به صورت (e.result)به PagedCollectionViewفرستاده بود من چطور میتونم متد را به این صورت اجرا کنم که متغیر PagedCollectionViewآنرا به عنوان پارامتر قبول کند؟
سوال:
با خصوصیت selecteditemدر datagridبه فیلد های سطر انتخابی میشه دسترسی داشت ونه هر سطری من میخوام به یک سطر خاص دسترسی داشته باشم ؟راحل
دوم را امتحان میکنم.ممنون از راهنمایی هاتون.
سلام
شما با کد زیر مشکل دارید؟!همان طور که گفتید
نوع متد را به Ilist تبدیل کردم و خروجی متد را به عنوان لیست فرستادم اما PagedCollectionViewاین را هم به عنوان ورودی قبول نمی کند و همان دو خطای قبلی
را میدهد
PagedCollectionView pcv = new PagedCollectionView(new List<string>());
به کدوم سطر؟(یک مثالی / توضیحی - غیب که نمی دانم!)با خصوصیت selecteditemدر datagridبه فیلد های سطر انتخابی میشه دسترسی داشت ونه هر سطری من میخوام به یک سطر خاص دسترسی داشته باشم ؟
موفق باشید
سلام
با استفاده از خاصیت dataview کنترل datasourse هم میشه رکورد ها را صفحه بندی کرد
PagedCollectionView pcv = new PagedCollectionView(mydomaindatasourse.dataview);
----به کدوم سطر؟
Datagridخاصیتی دارد که بتونیم اندیس سطر و ستون را مشخص کنیم ؟
یا مثلا در datagridیک رکورد بیشتر وجود ندارد آیا میشه مقدار تک تک
فیلد های این رکورد را خواند؟
سوال:با متد select()چطور میشه اطلاعات دریافتی از بانک را فیلتر
کرد؟نام چند فیلد را چطور به این متد بدهیم؟با یک فیلد درست جواب میدهTable.select(a=>a.code_karbar).
سوال:دکمه# کجاست؟که تگ [CODE]را اضافه میکند.
سلام
ببخشید کمی دیر شد(اینترنتم ترکید!)
خصیصه SelectedIndexDatagridخاصیتی دارد که بتونیم اندیس سطر و ستون را مشخص کنیم ؟
شما گریدتان را به یک منبع بایند کردید وقتی می دانید کدام یک از اعضای آن منبع انتخاب شده (با استفاده از SelectedItem) می توانید هر تغییری در منبع ایجاد کنید که به ظاهر هم انتقال پیدا می کند(پیشنهاد می کنم کمی بر روی بایندینگ ها در سیلور بیشتر مطالعه کنید)یا مثلا در datagridیک رکورد بیشتر وجود ندارد آیا میشه مقدار تک تک
فیلد های این رکورد را خواند؟
با کدی شبیه این:با متد select()چطور میشه اطلاعات دریافتی از بانک را فیلتر
کرد؟نام چند فیلد را چطور به این متد بدهیم؟با یک فیلد درست جواب میده
lst.Select(a => new { A = a.Item1, B = a.Item2, C = a.Item3 });
دقیقا بالای جایی که می خواهید متن پستتان را بنویسید دکمه # وجود داردسوال:دکمه# کجاست؟که تگ [CODE]را اضافه میکند.
موفق باشید
سلام
مشکل:
پیش میاد وقتی متد جدیدی را به سرویس اضافه میکنم دیگه datasource را نمیشناسد؛ وحتی از پنجره ی datasourceهم حذف میشود و با خطا های زیادی مواجه میشم.
مثلا من برای update کردن اطلاعات یک جدول با استفده از خصوصیت attachو submitchangeیک رکورد جدید را به متد سرویس فرستادم ولی تغییرات در بانک اعمال نشده بود من یک spبرای این کار نوشتم و آن را در سرویس فراخوانی کردم و درست انجام داد.نوع متد در سرویس را intتعریف کردم ولی متد دیگه ای که یک sp مثل قبلی را اجرا میکرد تعریف کردم با نوع void که مشکلی که گفتم پیش آمد فکر میکنید چون من از خود متد های سرویس استفاده نکردم برای سرویس اینطور شد؟
تشکر.
سلام
من متد select را همون طور که گفتید تعریف کردم که دو فیلد از یک جدول را selectمیکند ولی در اجرا خطا می دهد.
return this.ObjectContext.manabe_tbl.Select(a => new manabe_tbl() { name_manbae = a.name_manbae, tozieh_taeid =.tozieh_taeid }).ToList
();آیا من باید یک کلاس در برنامه تعریف کنم با نام این دو فیلد که یکیشو به عنوان کلید تعریف کنم؟ اگه اینطور است من باید این کلاس را کجا اضافه کنم؟
سلام
برای ذخیره تغییرات از متد SaveChanges استفاده کنیدمثلا من برای update کردن اطلاعات یک جدول با استفده از خصوصیت attachو submitchangeیک رکورد جدید را به متد سرویس فرستادم ولی تغییرات در بانک اعمال نشده بود
چطور شد؟چون من از خود متد های سرویس استفاده نکردم برای سرویس اینطور شد؟
اگر منظورتان از سرویس مشتقات DomainService است/این کلاس ها را می توانید تغییر دهید ولی اگر به کدهای خودش هم نگاه کنید متوجه کمی قوانین از جمله تعریف metadata ها می شوید
متن خطا را بگذاریدولی در اجرا خطا می دهد.
نهایتا پیشنهاد می کنم کمی بیش تر در زمینه Ria Services مطالعه کنید یا حداقل پروژه این سمپل را به همراه جزوه توضیحاتش کمی بررسی و مطالعه کنید.(دانلود فایل های walkthrough و HRAppCS_VS2010 کافی است)
موفق باشید
سلام
ممنون برای لینکی که گذاشتید
من هم برای حل مشکلاتم از msdn خیلی استفاده میکنم اما بعضی وقتها راحل هایی رو که داده اجرا میکنم جواب نمیده
متن خطا: پنجره just-in-time debuggerباز میشود
an unhandeled exception unhandeled error in silverlight application
code 4004
category:managed runtime error
message:system.servicemode.domainservices.client.d omainopration exeption
سلام
متن خطا میگه وقتی یکی از متدهای کلاس DomainService تان را در کلاینت فراخوانی می کنید یک خطا رخ می دهد.
پیشنهاد می کند در زمان اجرا آن متد خاص را با گذاشتن Break point ها خط به خط بررسی کنید(Stake trace رو هم نگاه کنید بدک نیست)
سلام
من هر کدوم از متدهای سرویس را که فراخوانی میکنم در اجرا همین خطا را میدهد addکردن با متدهای سرویس یا updateو...
ولی اگر با sp ها کار کنم و کل کار با بانک را با spانجام دهم و در سرویس فراخوانی کنم مشکل ندارم نمی دونم مشکل از چیه؟میتونید راهنمایی کنید؟ممنونم.
سلام
سوال:بعد از تعریف validation ها در metadata.csبرای اجرای این validationها باید چیکار کرد آیا حتما باید از dataform استفاده کرد؟اگر من از textbox استفاده کنم که خصوصیت text را به این صورت تعریف کنم
="{Binding Path=email, Mode=TwoWay, NotifyOnValidationError=true, ValidatesOnExceptions=true, TargetNullValue=''}"
الان با قرار دادن یک دکمه که عمل submitchangeرا انجام دهد من میتونم این validation ها رو اجرا کنم ؟مقدار این text ها را چطور به متد addبفرستم؟
چون دیگر کد را خود VS تولید می کند(و البته بدون خطا)...ولی اگر با sp ها کار کنم...
(نظر من همان پست 28 است)
نوع برنامه تون چیه؟ (در حال حاضر اگر یک Business App باشد نیازی به DataForm نیست در غیر اینصورت بله)بعد از تعریف validation ها در metadata.csبرای اجرای این validationها باید چیکار کرد آیا حتما باید از dataform استفاده کرد؟
پروپرتی ها به تکست باکس بایند شده؟ ->یله / البته بدون کلیک و با برداشته شدن فوکوس هم عمل Validation می بایست عمل کند.الان با قرار دادن یک دکمه که عمل submitchangeرا انجام دهد من میتونم این validation ها رو اجرا کنم ...
مقدارشان را از منبعی که به آن بایند شده بگیرید(سمپلی که گفتم را انشاا... نگاه کردید)
موفق باشید
سلام
پروژه من از نوع navigation appاست تقریبا مشکلم با validation حل شد.
سوال:شما فکر میکنید استفاده از spبرای کار با بانک بهتر است یا با خود EF؟بهتر نیست کار با داده ها را به sql بسپاریم؟
سوال:wcfبا wcf ria serviceچه فرقی دارد آِیا مزیتی نسبت به هم دارند؟
سلام
به شخصه دوست ندارم قدرت و دینامیک بودن EF را با SP ها و View ها محدود کنم
EF چیز ساده ای نیست در حالی که ما به خاطر سادگی کارمون ازش استفاده می کنیم! (کوچکترین کتب موجود که در زمینه EF دیدم حداقل 500 صفحه داشته اند)
شما می توانید امکانات جدید اضافه شده در اینجا مشاهده کنید
البته استفاده از SP ها هم مخصوصا در دیتابیس ها بزرگ تاثیر بسزایی بر روی سرعت برنامه داره...
(البته اینها نظرات من بود)
وجه مشترکشان WCF است!wcfبا wcf ria serviceچه فرقی دارد آِیا مزیتی نسبت به هم دارند؟
و WCF RIA Services (همونطور که اسمش پیداست) خدمات بیشتری را برای استفاده در Rich Internet Applications را به WCF اضافه می کند(از جمله ایجاد کلاس های Domain Service با چند کلیک).
موفق باشید
سلام
من با کد های زیر نمی تونم رکوردها را ویرایش کنم خطا نمیده ولی تغییرات در بانک اعمال نمی شود؟
private
void updatekarbar_click(object sender, RoutedEventArgs e)
{
karbar_tbl newk=newkarbar_tbl();
newk.code_karbar = code_karbar;
newk.name_karbar=name_karbaryp.Text;
newk.password=passwordp.Password;
newk.name=name_kp.Text;
newk.familly=famillyp.Text;
newk.email=emailp.Text;
bankContext update = newbankContext();
update.karbar_tbls.Attach(newk);
update.SubmitChanges(SubmitOperation_Callback,
null);
}
public
void UpdateKarbar_tbl(karbar_tbl currentkarbar_tbl)
{
this.ObjectContext.karbar_tbl.AttachAsModified(current karbar_tbl, this.ChangeSet.GetOriginal(currentkarbar_tbl));
this.ObjectContext.SaveChanges();
}
سلام
واقعیتش من چندان متوجه کدهاتون نشدم ولی خودم با توجه به برداشتی که از نیازتون دارم کمی توضیح میدم:
شما در یک صفحه با نام EmployeeList یک لیستی از تمام Employee هاتون را به وسیله DomainDataSource تون می گیرید و نمایش می دهید.
یکی از Employee ها را انتخاب می کنید و بر روی دکمه Update کلیک می کنید و این Employee را به یک پنجره دیگه(یا یک ChildWindow) می فرستید و آنجا آن را ویرایش می کنید و بر می گیردید به پنجره لیست ها و سپس لیستتان را آپدیت می کنید.
نمونه کد این می شود کلاس EmployeeList و EmployeeRegistrationWindow در پروژه مثالی که در چند پست قبل بهتون معرفی کردم(حتما یک نگاهی بندازید)
سلام
برداشتتون درسته،من همین کار رو میخوام انجام بدم.
من مثالی رو که گفتید قبلا دیدم اونجا با قراردادن این کد در دکمه submit
()employeeDataSource.submitchanges آپدیت اطلاعات را انجام داده با این روش میشه آپدیت رو انجام داد اما مشکلی که من دارم اگر کاربر بدون توجه به پیام های validationدکمه submit را بزنند در اجرا خطا پیش میاد و پنجرهvisual studio just-in-timedibugerباز میشود
ومن نمیتونم این خطا رو خودم در کد (مثلا با try,catch )مدیریت کنم روشی که کدشو قبلا گذاشتم با فراخوانی یک متد خطا های ناشی از.submitchanges را handelمیکرد،که متاسفانه جواب نمیده.حالا با این روش که در پروژه مثال گفته چطور میشه خطا را با یک پیام به کاربر نشان داد؟ مثلا اگر کاربر یک فیلد را خالی گذاشت و به پیام خطاهای validation توجه نکرد و دکمه submitرا زد یه پیام خطا نمایش بدیم و نزاریم پنجره visual studio just-in ...باز شود؟
سلام
ساده ترین راه حل چک کردن کنترلرها از داشتن خطا قبل از submit کردن دیتا هست.برای انجام اینکار کافی است کنترلری(مثلا یک تکست باکس) که می خواهید خطایش را چک کنید به عنوان پارامتر به متد Validation.GetHasError ارسال کنید اگر true بود یعنی خطا داره و شما نباید submit کنید و در غیر اینصورت ...مشکلی که من دارم اگر کاربر بدون توجه به پیام های validationدکمه submit را بزنند در اجرا خطا پیش میاد و پنجرهvisual studio just-in-timedibugerباز میشود
شما در مواقعی که می خواهید تعداد زیادی کنترلر را چک کنید می توانید داخل فرزندان پنل اصلی گردش کنید و با توجه به نوع کنترلرهایی که می خواهید/ آن ها را نتخاب و چک کنید...
*راه حل زیبا تر و الگومند تر پیاده سازی رابط IDataErrorInfo و امثالش! هست. نمونه =>
{
http://johnpapa.net/silverlight/enab...dataerrorinfo/
-
http://jesseliberty.com/2010/07/25/d...nd-templating/
}
موفق باشید
سلام
در کلاس هایی که برای custom validationتعریف میکنیم میشه به متد هایی که در سرویس تعریف شده اند دسترسی داشت؟ مثلا دسترسی به اطلاعات یک جدول؟این کلاس ها را از طریق add->new item->codefileایجاد کرده ام فضای نام ها را هم اضافه کردم ولی متد های سرویس را نشناخت.
منظورتان کلاس هایی است که با صفت Metadata مزین شده اند؟ این کلاس ها برای چسباندن برخی از رفتارها و صفت ها به entity تولید شده استفاده می شوند تا اگر دوباره entity تان را تولید یا آپدیت کردید این Metadata ها پاک نشوند.در کلاس هایی که برای custom validationتعریف میکنیم
چون این کلاس ها با Entity تولید شده کار می کنند نه سرویس.ولی متد های سرویس را نشناخت
شما کدهایی که می خواهید در سرور اجرا شوند را فقط می توانید در مشتقات سرویستان پیاده کنید.
سلام
منظورتون را کامل متوجه نشدم.من می خواهم مقدار فیلد نام کاربری که از کاربر دریافت می کنم را در جدول چک کنم که این مقدار تکراری نباشد می خواهم این کار را با validationها انجام دهم؟باید در سرویس کلاسی برای انجام این کار تعریف کنم یا یک کلاس جدید در پروژه addکنم ؟