PDA

View Full Version : یافتن فیلدهای تغییر کرده در یک Entity



PetekDincos
پنج شنبه 09 دی 1389, 21:51 عصر
با سلام
من چطور می تونم در Entity هایی که EntityState آنها Added یا Modified است فیلدهایی که مقادیر آنها تغییر کرده است پیدا کنم چون من در یک دیتاگراید اطلاعات یک جدول را نشون می دم و می خواهم وقتی مقدار فیلد یک ستون خاص از دیتاگراید تغییر کرد یا افزوده شد یک رکورد را در یک جدول دیگر تغییر بدم برای همین بایستی اون فیلدی که تغییر می کنه را پیدا کنم و از کد زیر استفاده میکنم اما به نتیجه نمی رسم



var

ChangedEntities =Context.ObjectStateManager.GetObjectStateEntries(

EntityState.Added | EntityState.Modified
);
foreach (var entity in ChangedEntities)
{
if (entity.Entity == null) continue;

var PropertyInfos = entity.Entity.GetType().GetProperties(
BindingFlags.Public | BindingFlags.Instance
).Where(n => n.CanRead && n.CanWrite && n.Name ==


"نام فیلد مورد نظر");

var prop = newPropertyReflector();

foreach (var propInfo in PropertyInfos)
{
var propName = propInfo.Name;
var value = prop.GetValue(entity.Entity, propName);
if (value != null)
{
MessageBox.Show(value.ToString());

}
}
}


این کد مقدار فیلد مورد نظر را برای همه حالت ها نشون می ده ولی من می خوام فقط برای حالتی که تغییر کرده یا افزوده شده نشون بده این کد را چطور تغییر بدم و خیلی برام حیاتی ممنون می شم اگه کمکم کنید با تشکر :گریه::گریه::گریه:

DrTJ2066
جمعه 10 دی 1389, 06:13 صبح
با سلام
من چطور می تونم در Entity هایی که EntityState آنها Added یا Modified است فیلدهایی که مقادیر آنها تغییر کرده است پیدا کنم چون من در یک دیتاگراید اطلاعات یک جدول را نشون می دم و می خواهم وقتی مقدار فیلد یک ستون خاص از دیتاگراید تغییر کرد یا افزوده شد یک رکورد را در یک جدول دیگر تغییر بدم برای همین بایستی اون فیلدی که تغییر می کنه را پیدا کنم و از کد زیر استفاده میکنم اما به نتیجه نمی رسم



var

ChangedEntities =Context.ObjectStateManager.GetObjectStateEntries(

EntityState.Added | EntityState.Modified

);
foreach (var entity in ChangedEntities)
{
if (entity.Entity == null) continue;



var PropertyInfos = entity.Entity.GetType().GetProperties(

BindingFlags.Public | BindingFlags.Instance
).Where(n => n.CanRead && n.CanWrite && n.Name ==




"نام فیلد مورد نظر");

var prop = newPropertyReflector();


foreach (var propInfo in PropertyInfos)
{
var propName = propInfo.Name;
var value = prop.GetValue(entity.Entity, propName);
if (value != null)
{



MessageBox.Show(value.ToString());

}

}
}





این کد مقدار فیلد مورد نظر را برای همه حالت ها نشون می ده ولی من می خوام فقط برای حالتی که تغییر کرده یا افزوده شده نشون بده این کد را چطور تغییر بدم و خیلی برام حیاتی ممنون می شم اگه کمکم کنید با تشکر :گریه::گریه::گریه:



چرا باید حتماً اینجوری مقادیر تغییر کرده رو بدست بیاری؟
می تونی از Triggerهای SQL استفاده کنی... هم سریعتره و هم بهینه تر...

PetekDincos
جمعه 10 دی 1389, 10:04 صبح
با سلام
من از EF استفاده می کنم و این راه به نظرم رسید و فکر کنم امکانش هم هست و با Trigger های SQL آشنایی چندانی ندارم اگر امکانش هست برای راه قبلی یا با استفاده از Trigger یه مثال قرار بدید ممنون می شم با تشکر

majid325
جمعه 10 دی 1389, 12:40 عصر
چرا باید حتماً اینجوری مقادیر تغییر کرده رو بدست بیاری؟
می تونی از Triggerهای SQL استفاده کنی... هم سریعتره و هم بهینه تر...

نه ،این طور نیست

PetekDincos
جمعه 10 دی 1389, 17:05 عصر
نه ،این طور نیست
با سلام
پس به نظر شما راه اول سریعتره و اگر امکانش است من راه حل اول رو چطور تغییر بدم تا به خواسته خودم برسم

PetekDincos
شنبه 11 دی 1389, 17:31 عصر
با سلام
آیا کسی نیست مرا یاری کند یه لینکی یه راهنمایی

ali021
چهارشنبه 29 دی 1389, 19:29 عصر
:عصبانی++: