LINQ TO SQL: تصفية الأشياء المتداخلة مع حذف ناعم
-
04-10-2019 - |
سؤال
أنا أستخدم الحذف الناعم في قاعدة البيانات الخاصة بي (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.