エンティティを子エンティティとともにDTOに変換する

Manti_Core

エンティティオブジェクトをローカルオブジェクトに変換して、さらに変換するために使用できるようにしようとしています。

エンティティオブジェクトを変換するために使用しているコードは次のとおりです。

IEnumerable<SystemArea> result = (from sa in CurrentContext.systemarea                                 
                                 select new SystemArea
                                 {
                                     SystemAreaId = sa.SystemAreaId,
                                     SystemAreaCode = sa.SystemAreaCode,
                                     SystemAreaType = sa.SystemAreaType,
                                     SystemAreaDescription = sa.SystemAreaDescription,
                                     SystemAreaCreatedDate = sa.SystemAreaCreatedDate,
                                     SystemAreaUpdateDate = sa.SystemAreaUpdateDate,
                                     SystemAreaStatus = sa.SystemAreaStatus,
                                     Count = sa.systemareafunctionality.Count,
                                     SystemAreaFunctionality = sa.systemareafunctionality.Select(e => new SystemAreaFunctionality { SystemAreaCode =e.SystemAreaCode })
                                 }).ToList();

ここで、カウント変数は、その中に子データがあるかどうかを確認するためのものです。

SystemAreaFunctionalityは、SELECT関数を使用してここで変換しようとしている子オブジェクトですが、常に空白のコレクションです。残りのデータは親オブジェクトに割り当てられていますが、ここで欠落しているのは子テーブルレコードだけです。どこがおかしいのか、助けてください!

生成されたSQL:

SELECT
`Project3`.`C1`, 
`Project3`.`SystemAreaId`, 
`Project3`.`SystemAreaCode`, 
`Project3`.`SystemAreaType`, 
`Project3`.`SystemAreaDescription`, 
`Project3`.`SystemAreaCreatedDate`, 
`Project3`.`SystemAreaUpdateDate`, 
`Project3`.`SystemAreaStatus`, 
`Project3`.`C3` AS `C2`, 
`Project3`.`C2` AS `C3`, 
`Project3`.`SystemAreaCode1`
FROM (SELECT
`Project1`.`SystemAreaId`, 
`Project1`.`SystemAreaCode`, 
`Project1`.`SystemAreaType`, 
`Project1`.`SystemAreaDescription`, 
`Project1`.`SystemAreaCreatedDate`, 
`Project1`.`SystemAreaUpdateDate`, 
`Project1`.`SystemAreaStatus`, 
1 AS `C1`, 
`Project2`.`SystemAreaCode` AS `SystemAreaCode1`, 
`Project2`.`C1` AS `C2`, 
`Project1`.`C1` AS `C3`
FROM (SELECT
`Extent1`.`SystemAreaId`, 
`Extent1`.`SystemAreaCode`, 
`Extent1`.`SystemAreaType`, 
`Extent1`.`SystemAreaDescription`, 
`Extent1`.`SystemAreaCreatedDate`, 
`Extent1`.`SystemAreaUpdateDate`, 
`Extent1`.`SystemAreaStatus`, 
(SELECT
COUNT(1) AS `A1`
FROM `systemareafunctionality` AS `Extent2`
 WHERE `Extent1`.`SystemAreaCode` = `Extent2`.`SystemAreaCode`) AS `C1`
FROM `systemarea` AS `Extent1`) AS `Project1` LEFT OUTER JOIN (SELECT
`Extent3`.`SystemAreaCode`, 
1 AS `C1`
FROM `systemareafunctionality` AS `Extent3`) AS `Project2` ON `Project1`.`SystemAreaCode` = `Project2`.`SystemAreaCode`) AS `Project3`
 ORDER BY 
`Project3`.`SystemAreaCode` ASC, 
`Project3`.`C2` ASC

JSON出力:

[{"SystemAreaId":1、 "SystemAreaCode": "KIO"、 "SystemAreaType": "KIOSK"、 "SystemAreaDescription": "受付に関連するタスク"、 "SystemAreaCreatedDate": "/ Date(1543421018000)/"、 "SystemAreaUpdateDate ":" / Date(1543421018000)/ "、" SystemAreaStatus ":true、" SystemAreaFunctionality ":[]、" Count ":1}]

PS:オートマッパーや拡張メソッドを提案しないでください。ありがとう!

Manti_Core

意見:

MySQL(最新バージョン)をEFで動作させるために、2日かかりました。それは骨の折れる作業でしたが、それどころか、MSSQLを使用したEFは非常にシンプルで実装が簡単です。

私が経験したことの1つは、OracleはMySQLの無料バージョンのサポートを提供することにまったく関心がないため、新しいバージョンのドキュメントがずさんで、不安定な.NETコネクタを提供していることです。

実際の答え:

EFは非常に奇妙な動作をしていたため、EFに子エンティティの子(つまり、SystemAreaFuncionalityの子であるSystemAreaFunctionalityEmployeeRoleMapping)をロードするように要求した場合にのみ、子エンティティ(SystemAreaFunctionality)にデータをロードしました。不要なデータを取ります。

したがって、私のリンククエリは次のようになります。

var result = (from sa in CurrentContext.systemarea
                          select new SystemArea
                          {
                              SystemAreaId = sa.SystemAreaId,
                              SystemAreaType = sa.SystemAreaType,
                              Count = sa.systemareafunctionality.Count,
                              SystemAreaFunctionalities = sa.systemareafunctionality.Select(saf => new SystemAreaFunctionality
                              {
                                  SystemAreaId = saf.SystemAreaId,
                                  SystemAreaFunctionalityController = saf.SystemAreaFunctionalityController,
                                  SystemAreaFunctionalityAction = saf.SystemAreaFunctionalityAction,
                                  SystemAreaFunctionalityType = saf.SystemAreaFunctionalityType,
                                  SystemAreaFunctionalityEmployeeRoleMappings = saf.systemareafunctionalityemployeerolemapping.Select(saferm => new SystemAreaFunctionalityEmployeeRoleMapping
                                  {
                                      SystemAreaFunctionalityEmployeeRoleMappingId = saferm.SystemAreaFunctionalityEmployeeRoleMappingId,
                                      SystemAreaFunctionalityCreatedDate = saferm.SystemAreaFunctionalityCreatedDate
                                  })
                              })
                          }).ToList();

代わりに:

今回はPostgreSQLとnpgsqlコネクタを使用して異なるデータベースで同じlinqクエリ(OPに投稿)を使用してみましたが、驚くべきことにEFは余分な荷物なしで私が望むものを正確に提供します。その上、PostgreSQLはMySQLよりもEFで優れたパフォーマンスを提供します。したがって、PostgreSQLへの切り替えがより良いオプションになると思います。

PS: オープンソースのDBMSを決定する場合は、MySQLに飛び込む前にこれを参照してください:

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

親エンティティを再接続するときに子エンティティを削除します

分類Dev

HibernateでエンティティをDTOとして使用する

分類Dev

エンティティの子を親エンティティと同じ行に入れるSQLクエリ

分類Dev

IQueryableIEnumerableエンティティをリストに変換する

分類Dev

Android-UnicodeをHTMLエンティティに変換する

分類Dev

JPAエンティティをマップに変換する

分類Dev

TSQLをLinqからエンティティに変換する

分類Dev

HTMLエンティティをPython絵文字に変換する

分類Dev

AndroidでHTMLエンティティを文字に変換する

分類Dev

JUnitテスト。ModelMapperライブラリを使用してエンティティをDTOに変換するときの問題

分類Dev

どこで、いつ、どのように DTO をエンティティに/から変換するか

分類Dev

ModelMapperを使用して複雑なエンティティをDTOに変換する

分類Dev

JaversはエンティティをDTOと比較します

分類Dev

Spring Boot Rest Controllerの他のエンティティ参照とともにHibernateエンティティにマップされたJSONを使用すると、Jackson InvalidTypeIdException

分類Dev

エンティティと子を削除する方法

分類Dev

テーブルをJavaエンティティに変換する

分類Dev

データベースに存在する1つの関連エンティティとともにエンティティを挿入します

分類Dev

HTMLエンティティ(dec)とhexをPHP変数に格納する方法

分類Dev

NestJs:ボディ入力の形状をエンティティのDTOとは異なるものにするにはどうすればよいですか?

分類Dev

Linq to Entities、子エンティティが条件に一致する子エンティティを持つ親エンティティを選択します

分類Dev

最初に子エンティティを$ expandし、次にOdataで親エンティティを$ expandする方法

分類Dev

エンティティをdtoにキャストします

分類Dev

HTMLエンティティを使用している間、アンパサンドと変換も行います。

分類Dev

エンティティに、他のエンティティにも属するエンティティが存在するかどうかを通知します

分類Dev

Spring Bootで親エンティティと一緒に子エンティティを更新するにはどうすればよいですか?

分類Dev

CascadeTypesに関係なく、親エンティティを削除せずに子エンティティを削除することはできませんか?

分類Dev

子エンティティの削除を休止状態にする

分類Dev

EFで親エンティティを更新するときに子エンティティを追加/更新する方法

分類Dev

EFで親エンティティを更新するときに子エンティティを追加/更新する方法

Related 関連記事

  1. 1

    親エンティティを再接続するときに子エンティティを削除します

  2. 2

    HibernateでエンティティをDTOとして使用する

  3. 3

    エンティティの子を親エンティティと同じ行に入れるSQLクエリ

  4. 4

    IQueryableIEnumerableエンティティをリストに変換する

  5. 5

    Android-UnicodeをHTMLエンティティに変換する

  6. 6

    JPAエンティティをマップに変換する

  7. 7

    TSQLをLinqからエンティティに変換する

  8. 8

    HTMLエンティティをPython絵文字に変換する

  9. 9

    AndroidでHTMLエンティティを文字に変換する

  10. 10

    JUnitテスト。ModelMapperライブラリを使用してエンティティをDTOに変換するときの問題

  11. 11

    どこで、いつ、どのように DTO をエンティティに/から変換するか

  12. 12

    ModelMapperを使用して複雑なエンティティをDTOに変換する

  13. 13

    JaversはエンティティをDTOと比較します

  14. 14

    Spring Boot Rest Controllerの他のエンティティ参照とともにHibernateエンティティにマップされたJSONを使用すると、Jackson InvalidTypeIdException

  15. 15

    エンティティと子を削除する方法

  16. 16

    テーブルをJavaエンティティに変換する

  17. 17

    データベースに存在する1つの関連エンティティとともにエンティティを挿入します

  18. 18

    HTMLエンティティ(dec)とhexをPHP変数に格納する方法

  19. 19

    NestJs:ボディ入力の形状をエンティティのDTOとは異なるものにするにはどうすればよいですか?

  20. 20

    Linq to Entities、子エンティティが条件に一致する子エンティティを持つ親エンティティを選択します

  21. 21

    最初に子エンティティを$ expandし、次にOdataで親エンティティを$ expandする方法

  22. 22

    エンティティをdtoにキャストします

  23. 23

    HTMLエンティティを使用している間、アンパサンドと変換も行います。

  24. 24

    エンティティに、他のエンティティにも属するエンティティが存在するかどうかを通知します

  25. 25

    Spring Bootで親エンティティと一緒に子エンティティを更新するにはどうすればよいですか?

  26. 26

    CascadeTypesに関係なく、親エンティティを削除せずに子エンティティを削除することはできませんか?

  27. 27

    子エンティティの削除を休止状態にする

  28. 28

    EFで親エンティティを更新するときに子エンティティを追加/更新する方法

  29. 29

    EFで親エンティティを更新するときに子エンティティを追加/更新する方法

ホットタグ

アーカイブ