سؤال

أنا أستخدم الحذف الناعم في قاعدة البيانات الخاصة بي (IsDeleted مجال). أنا أستخدم بنشاط LoadWith و AssociateWith طرق لاسترداد وتصفية السجلات المتداخلة.

الشيء هو AssociateWith يعمل فقط مع الخصائص التي تمثل علاقة واحدة إلى حد.

DataLoadOptions loadOptions = new DataLoadOptions();
loadOption.LoadWith<User>(u = > u.Roles);
loadOption.AssociateWith<User>(u = > u.Roles.Where(r = > !r.IsDeleted));

في المثال أعلاه أقول فقط: أريد استرداد المستخدمين بأدوار ذات صلة (غير محدودة).

ولكن عندما يكون لدي علاقة فردية ، على سبيل المثال Document -> File (الملف الوحيد المرتبط بالوثيقة) أنا غير قادر على تصفية كائن محذوف ناعم:

DataLoadOptions loadOptions = new DataLoadOptions();
loadOption.LoadWith<Document>(d = > d.File);
// the next certainly won't work
loadOption.AssociateWith<File>(f = > !f.IsDeleted);

إذن ، هل هناك أي فكرة عن كيفية تصفية السجلات في العلاقة الفردية؟

شكرًا!

هل كانت مفيدة؟

المحلول

حتى الآن لم أجد سوى حل واحد مناسب لهذا (بصرف النظر عن عدم استخدام الحذف الناعم على الإطلاق): لحذف علاقة الحذف الناعمة في تحديث الكيان.

على سبيل المثال ، عندما قررت إزالة ملف من المستند ، أقوم بأداء شيء مثل:

// this may be a part of update method
var file = document.File;
if (file.IsDeleted)
{
    // attach soft deleted file
    context.Files.Attach(file, true); 

    // remove a file reference
    document.File = null;
}

// attach document entity and submit changes
context.Documents.Attach(document, true);
context.SubmitChanges();

لذلك ، قد يكون هذا بديلاً لتصفية العلاقة الفردية على استرداد البيانات المعقدة.

نصائح أخرى

ربما حاول:

loadOptions.AssociateWith<File>(f => f.IsDeleted ? null : f);

سيعطيك هذا خفيًا بدلاً من الملفات التي يكون فيها iSdelet.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top