2017-01-30 29 views
2

Dapperを使用してSQL SELECTをオブジェクトにマップするいくつかの継承コードがあります。 SELECTには同じ名前の複数の列があります(簡略化のため、一部の列は省略されています)。Dapperが同じ名前の2つの列を選択する方法

SELECT 
    created_timestamp AS CreatedDate, 
    imported_timestamp AS CreatedDate 
FROM Orders 
WHERE OrderId = @OrderId 

データの分析では、2つのCreatedDate列のうち1つのみが各レコードに取り込まれることが示されています。いくつかのテストを実行すると、DapperはNULLでないCreatedDateを選択しているようです。 Dapperがこのような状況をどのように処理しているかに関するドキュメントは見つかりませんでした。 Dapperが常に非NULL値を選択することに頼ることはできますか?

+0

同じエイリアス名の列が2つあるのはなぜですか?これを使用するユースケースは何ですか? – Shyju

答えて

0

Dapperは(マイクロ)ORMであり、データベースのCRUD操作に使用する必要があります。

あなたのビジネスロジックはどこか別のものになるはずです。実装は非常に簡単です。名前が重複する列は作成しないでください。 dapperを使用してデータベースからデータを取得し、その他の場所でビジネスロジックを適用します。

//Following is query 
SELECT 
    created_timestamp AS CreatedDate, 
    imported_timestamp AS ImportedDate 
FROM Orders 
WHERE OrderId = @OrderId 

//Following is your POCO/DTO 
public class Order 
{ 
    public int OrderId;//or Guid if that suits you 
    public string CreatedDate;//or DateTime if that suits you 
    public string ImportedDate;//or DateTime if that suits you 
} 

//Following is your business logic 
Order order = orderService.GetOrder(orderId); 
if(order.CreatedDate != null) 
    //Do something 
else if(order.ImportedDate != null) 
    //Do something else 

あなたの調査に基づいて、Dapperによって非ヌルの列が選択されても、これは将来のバージョンでは保証されない場合があります。

関連する問題