1

IsDeletedデータベース(フィールド)でソフト削除を使用しています。ネストされたレコードを取得およびフィルタリングするためのメソッドを積極的に使用LoadWithしています。AssociateWith

これはAssociateWith、1対多の関係を表すプロパティでのみ機能します。

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

上記の例では、次のように述べています。関連する(削除されていない)ロールを持つユーザーを取得したい

しかし、たとえばDocument-> File(1つのファイルのみがドキュメントに関連している)のように1対1の関係にある場合、ソフト削除されたオブジェクトをフィルタリングできません。

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

では、1対1の関係でレコードをフィルタリングする方法はありますか?

ありがとう!

4

2 に答える 2

1

これまでのところ、これに適した解決策は1つだけです(ソフト削除をまったく使用しないことを除けば):エンティティの更新時にソフト削除関係を削除することです。

たとえば、ドキュメントからファイルを削除することにしたとき、次のようなことを実行します。

// 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();

したがって、これは、複雑なデータ取得での1対1の関係フィルタリングの代わりになる可能性があります。

于 2010-06-21T17:01:14.550 に答える
0

多分試してみてください:

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

これにより、IsDeletedがtrueのファイルの代わりにnullが返されます。

于 2010-05-21T15:12:57.413 に答える