PDA

View Full Version : مشکل بروزرسانی در EF Core



payam64
سه شنبه 03 تیر 1399, 18:04 عصر
با سلام
برای بروزرسانی داده های یک جدول ایجاد شده با ef core بطوریکه یک ارتباط یک به چند بین این جدول با داده های جدول دیگه برقرار هست و به نوعی میشه گفت این جدول والد برای جداول فرزندهای خودشه اما مشکل اینجانس که پس از هر بار بروزرسانی داده های جدول والد کلیه داده های سمت چند پاک میشن وقتی تریس میگرم مقدار پراپرتی مربوط به navigation با حدول فرزندش مقدار Null داره

آیا برای بروزرسانی باید مقادیر حدول فرزند هم Include بشن ؟

نمونه کد نوشته شده برای بروزرسانی در یک کلاس generic repository


public virtual async Task<T> Update(object entityKey, T editedEntity, string[] includes)
{
var current = await FindEntity(entityKey);
if (current != null)
_unitOfWork.Context.Entry(current).State = EntityState.Detached;
current = editedEntity;
DbSet.Update(current);
var commit = await _unitOfWork.Commit();
return commit > 0 ? current : null;
}

payam64
سه شنبه 10 تیر 1399, 20:34 عصر
سلام فکر کنم کلا این فروم مدیر نداره !!!
بریم سراغ جواب برای بروزرسانی در EF Core برای زمانیکه شما بین دو جدول ارتباط یک به چند دارین و برای همین در صورتیکه از Entry برای بررسی change tracking استفاده کنین برای نسخه های کلاسیک و قبل از EF Core برای خود موجودیت اصلی به همراه تمامی وابستگی های اون پیمایش میشدن در حالیکه در EF Core فقط موجودیت اصلی رو track میکنه و نه تمامی جداول وابسته به اون که اصطلاحا میگیم کل graph پیمایش نمیشه به همین دلیل بعد از بروزرسانی تمامی داده های جداول طرف چند حذف میشن


_context.Entry(entity).State = EntityState.Modified;


برای همین بجای دستور بالا از Update در EF Core استفاده میشه که کل گراف پیمایش میشه و قابلیت جالب دیگه توی ef core آپدیت کردن چندین entity با دستور UpdateRange هست

https://www.entityframeworktutorial.net/efcore/working-with-disconnected-entity-graph-ef-core.aspx