PDA

View Full Version : discard change



ایمان اختیاری
پنج شنبه 04 شهریور 1389, 15:35 عصر
سلام..
یه تیکه کد دارم به این صورت
ClientInf ci = new ClientInf()
{
EnterTime = DateTime.Now.ToString("hh:mm:ss"),
intFlag = 5,
PcId = 12,
stcode = textBox1.Text,
TimeRemaing = 20
};
dbase.ClientInfs.InsertOnSubmit(ci);
dbase.SubmitChanges();
خب...فقط ممکنه اطلاعات که قراره وارد بشه قبلا توی جدول وجود داشته باشه
روی همین خاطر از بلاک کنترلی Try -- catch استفاده می کنم .. این تیکه کد توی try و بعدش توی بلاک catch هم کد زیر رو نوشتم

var query = from t in dbase.ClientInfs
where t.stcode == textBox1.Text
select t;

textBox2.Text = query.Single().TimeRemaing.ToString();

خب .. حالا مشکل از اینجا شروع می شه که وقتی اطلاعات تکراری می خواد وارد بشه چون فیلد stcode به صورت کلید تعریف شده پس خطا داریم و دستور submitchange انجام نمی شه و به بلاک catch می ریم
اونجا چون هنوز دستور insert لغو نشده مقدار فیلد timeremaning هنوز همون مقداریه که می خواستیم ثبت کنیم نه چیزی که الان توی دیتابیس هست ..

برای این موضوع Discard Change سرچ زدم چند تا مطلب پیدا کردم

dbase.Refresh(System.Data.Linq.RefreshMode.Overwri teCurrentValues, dbase.ClientInfs);
برای مورد فوق گفت دیتا در حالت فقط خواندنی هست امکانش نیست

dbase.GetChangeSet().Inserts.Clear();
برای مورد فوق گفت دیتا هنوز در حالت insert هست پس نمی شه پاکش کرد

var change = dbase.GetChangeSet();
foreach (var updating in change.Updates)
{
dbase.GetTable(updating.GetType()).DeleteOnSubmit( updating);
}

و مورد فوق هم بدون error انجام شد ولی نتایج صحیح نبود
جایی خوندم باید از تراکنش استفاده کنم ..و وفکر کنم آخرش همین کار رو باید انجام بدم ولی این موراد چرا انجام نشد و در کل اگه بخوایم discard کنیم چه راه حلی دارید ؟
متشکرم

ایمان اختیاری
دوشنبه 08 شهریور 1389, 10:13 صبح
از دوستان عزیز کسی نمی تونه یه کم کمک کنه ؟ یا یه مقدار راهنمایی؟

ایمان اختیاری
پنج شنبه 11 شهریور 1389, 13:19 عصر
فعلا مشکلم رو با یه stored procedure حل کردم .. به این صورت که کار اضافه کردن اطلاعات رو sp انجام می ده اگه قبلا ثبت شده باشه توی بلوک catch داده ی تکراری رو بازیابی می کنیم ..
ولی هنوز برام سوالم بدون جواب مونده