web-dev-qa-db-ja.com

Entity Framework Core 2.1以降の翻訳可能なモデルのベストプラクティス

Entity Framework Core-backed ASP.NET Core RESTfulサービスを構築しており、Product、Documentなどのエンティティ/モデルが複数の言語で記述されています。 (ヘッダー/ Cookieなどによって設定された現在のUIカルチャに基づいて)翻訳された説明付きの基本情報を提供することにより、関連ドキュメントで製品を動的にクエリできるようにしたい

残念ながら、EF CoreのIncludeはナビゲーションプロパティで呼び出されますできません次のようにフィルタリングされます:

_dbContext.Products
   .Include(p => p.Documents,
          d => d.Language.Equals(CultureInfo.CurrentUICulture.TwoLetterISOLanguageName));

EF Core 2.1にはグローバルフィルターがあり、一時的削除やマルチテナンシーなどの管理に使用できることを知っていますが、言語ごとにリクエストごとのフィルターが必要です(必要な場合)。

だから私はどのようにそのような機能を達成するのか、そして一般にEF Core 2.1で翻訳を管理するためのベストプラクティスがあるかどうか(たとえば、[Owned]プロパティ、条件付きインクルードの拡張を含むナビゲーションプロパティなど)

2
Salaros

私の知る限り、ユースケースにすぐに使える機能はありません。

ただし、常に手動で参加できることに注意してください。

var result = _dbContext
    .Products
    .Join(
        _dbContext
            .Documents
            .Where(d => d.Language.Equals(CultureInfo.CurrentUICulture.TwoLetterISOLanguageName)),
        product => product.ID,
        document => document.ProductID,
        (product, document) => new {Product = product, Document = document}
    );

そして、GroupByまたは後で必要になるかもしれない他のものを使用します

2
gcali