1

Microsoft Entity Framework を使用している 3 層 Web アプリケーションに取り組んでいます。異なるレイヤー間を疎結合にするために、データ転送オブジェクトを使用して Entity Framework オブジェクトとカスタム オブジェクトの間を転送していますが、エンティティ フレームワークとカスタム DTO の間の変換速度に問題があります。このメソッドを使用して、EF から DTO に転送します。

public List Transform(List carModelDefinition) {

        List<CarDefinitionDTO> cdDTOList = new List<CarDefinitionDTO>();
        foreach (DataLayer.CarModelDefinition cmd in carModelDefinition)
        {
            CarDefinitionDTO cdDTO = new CarDefinitionDTO();
            cdDTO.CarDefinitionId = cmd.CarModelDefinitionId;
            cdDTO.Compagny = cmd.Company;
            cdDTO.Model = cmd.Model;
            cdDTOList.Add(cdDTO);
        }
        return cdDTOList;

}

しかし、たとえば 600 個の要素のリストを転送しようとすると、約 10 秒以上かかります。私は何か間違ったことをしていますか、それとも単に速度が遅いのでしょうか? 注意。私は非常に高速な PC で作業しているため、速度が低下するのは PC の速度ではありません。

4

5 に答える 5

2

エラーが見つかりました。コンストラクターでは、エンティティマネージャーのインスタンスを作成します。新しいオブジェクトを作成すると、常に新しいインスタンスが作成され、非常に時間がかかりました。

于 2009-03-08T08:55:47.233 に答える
1

投稿したコードは、EF 型と DTO 型の間で変換を行うだけではありません。データベースからデータをフェッチすることもできます。測定目的で 2 つを分離してみてください。おそらく、10 秒かかるのはデータの取得であり、メモリ内でのデータの移動に費やされた時間ではありません。

于 2009-03-07T12:28:10.430 に答える
0

ドライ!EntitiesToDTOsのようなDTO/アセンブラージェネレーターを使用してみてください。EntityFrameworkEDMXファイルからDTOとアセンブラーを生成します。そうすれば、すべてのエンティティ/ DTOマッピングをコーディングする必要がなくなり、アセンブラーはエンティティと生成されたDTOに拡張メソッドを追加するため、次のようにコーディングすることになります。

var myCar = new Car();
CarDTO dto = myCar.ToDTO();
myCar = dto.ToEntity();

また:

ICollection<Car> carCol = new List<Car>();
ICollection<CarDTO> carDTOs = carCol.ToDTOs();
carCol = carDTOs.ToEntities();

非常にシンプルで、ツールは本当に使いやすいです。

于 2012-11-28T12:54:37.650 に答える
0

データをバイナリ形式 (圧縮および解凍) でzip試すことができます。unzip

于 2014-07-23T03:02:06.467 に答える
0

次のように言ってロードします。

        public List<CarDefinitionDTO> LoadAll()
    {
        List<DataLayer.CarModelDefinition> carList = (from cd in mee.CarModelDefinition select cd).ToList();
        CarDefinitionDTO cdDTO = new CarDefinitionDTO();
        List<CarDefinitionDTO> carDefList = cdDTO.Transform(carList);
        return carDefList;
    }
于 2009-03-07T20:27:23.617 に答える