اندازهی قلم متن
تخمین مدت زمان مطالعهی مطلب:
یک دقیقه
در مورد یکسان سازی ی و ک در حین استفاده از WCF RIA Services پیشتر مطلبی را در این سایت خوانده بودید. جهت تکمیل این بحث، بسط این روش به Entity framework به صورت زیر خواهد بود:
using System.Data;
using System.Data.Objects;
using System.Linq;
using System.Reflection;
namespace EfExt
{
public static class CorrectYeKe
{
public static void ApplyCorrectYeKe(this ObjectContext ctx)
{
if (ctx == null)
return;
//پیدا کردن موجودیتهای تغییر کرده
var changedEntities = ctx.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(p => p.CanRead && p.CanWrite && p.PropertyType == typeof(string));
var pr = new PropertyReflector();
//اعمال یکپارچگی نهایی
foreach (var propertyInfo in propertyInfos)
{
var propName = propertyInfo.Name;
var val = pr.GetValue(entity.Entity, propName);
if (val != null)
{
pr.SetValue(
entity.Entity,
propName,
val.ToString().ApplyUnifiedYeKe());
}
}
}
}
}
}
ابتدا موجودیتهای تغییر کرده یافت خواهند شد (اگر از self tracking entities استفاده میکنید استفاده از Context.DetectChanges پیش از فراخوانی این متد ضروری خواهد بود)، سپس در این لیست در مورد تک تک اشیاء، خواص رشتهای که readonly نیستند یافت شده و ی و ک آنها یک دست میشوند.
محل اعمال آن هم باید پیش از فراخوانی Context.SaveChanges باشد.
سورس این کتابخانه را از اینجا میتوانید دریافت کنید.