1

LINQ to SQL を使用するかなり大規模な ASP.NET MVC プロジェクトがあり、Windows Azure に移行中です。

ここで、Azure 分散キャッシュに格納するためにオブジェクトをシリアル化する必要があり、.dbml ファイルで "シリアル化モード" を "単方向" に設定生成されたクラスとプロパティをそれに応じて属性で自動的に装飾することが推奨されるようです。仕方。ただし、これにより、LINQ to SQL によってまだ読み込まれていないリレーションシップは、シリアル化して として保存するときに失われます。DataContractDataMembernull

いくつかのことを考慮して、どのような進め方が望ましいでしょうか。

  • 前述のように、これはかなり大きなプロジェクトであり、生成された *.designer.cs ファイルは 1.5 MB 近くになります。
  • 遅延読み込みを完全に無効にすると、多くの深いクラス関係のためにパフォーマンスが大幅に低下する可能性があります 。
  • ORM ツールの変更は検討中ですが、プラットフォームの変更と同時に行うのはおそらく悪いことです。

これが、プロジェクト全体でシリアル化するオブジェクトとリレーションを手動で指定することになる場合。パフォーマンスを向上させるためにprotobuf-netのようなものを使用することは、おそらく大きな一歩ではないでしょう。

4

1 に答える 1

2

ただし、これにより、LINQ to SQL によってまだ読み込まれていないリレーションシップは、シリアル化して null として保存するときに失われます。

はい、これは正常であり、シリアル化するときに予想されます。遅延読み込みはデータ コンテキストを介して読み込まれることに依存するため、基本的にその時点で利用可能だったもののスナップショットを作成しています。ロードするものを探してモデル全体をクロールするツールはお勧めできません。これは無期限に継続し、本質的に不要なデータの大きなチャンクが発生する可能性があるためです。

オプション:

  • シリアル化する前に、関心のあるデータを明示的に取得します (「loadwith」を介してプリエンプティブに、または適切なプロパティをヒットすることにより)。
  • または、シリアライゼーションのためにデータを完全に別のDTO モデルにロードします。多くの点で、これは最初のステートメントの再記述です。必要なデータを反復処理 (投影) する必要があるためですが、作成していることを意味します。実際に送信したい正確な形状に合わせたDTO
于 2013-10-08T11:32:48.917 に答える