簡體   English   中英

使用Dapper ORM的最簡單方法

[英]Easiest way to use Dapper ORM

將Dapper ORM查詢的輸出獲取到提供查詢方法的類的數據成員中,最簡單的方法是什么?

這是我的方法A(丑陋)和B(不起作用)的代碼:

public class MyLab_ClientRef
{
    public int UserId { get; set; }
    public string ClientId { get; set; }
    // ... more fields ...

    public bool GetUser(OracleConnection conn, int UserId, string ClientId)
    {
        bool Ok = false;
        IEnumerable<MyLab_ClientRef> QueryResultRecords =
            conn.Query<MyLab_ClientRef>(@"
                SELECT *
                FROM MyLab_ClientRef
                WHERE UserId   = :UserId
                  AND ClientId = :ClientId",
            new { UserId = UserId, ClientId = ClientId });
        if (QueryResultRecords.Count() == 1)
        {
            // Method A
            MyLab_ClientRef Rec = QueryResultRecords.First(); // works
            CopyRec(Rec, this);                               // ugly

            // Method B
            this = QueryResultRecords.First();            // avoids CopyRec, does not work

            Ok = true;
        }
        return Ok;
    }

    private static void CopyRec(MyLab_ClientRef CR_From, MyLab_ClientRef CR_To)
    {
        CR_To.UserId = CR_From.UserId;
        CR_To.ClientId = CR_From.ClientId;
    }
}

我喜歡使記錄定義靠近獲取記錄的查詢,但是不喜歡以這種方式為每個表類實現CopyRec方法。

有沒有更好的方法來實現這一目標? 我試圖寫this = ...但這是不可能的。

如何編寫比方法A更好的方法B?

以下操作無效:

this = QueryResultRecords.First();

檢查以下鏈接以了解原因:

為什么不能在C#中將“ this”設置為值?

MSDN

如上面的第一個鏈接所示,最好的選擇仍然是從給定的方法返回MyLab_ClientRef ,可以將其MyLab_ClientRef靜態並用於value or reference賦值,在這種情況下,要么應產生相同的結果

請檢查以下內容,是否可以使您的視圖更簡潔:

public class MyLab_ClientRef
{
    public int UserId { get; set; }
    public string ClientId { get; set; }
    // ... more fields ...

    public static MyLab_ClientRef GetUser(OracleConnection conn, int UserId, string ClientId)
    {
        bool Ok = false;

        var QueryResultRecords =
            conn.Query<MyLab_ClientRef>(@"SELECT * FROM MyLab_ClientRef WHERE UserId = :UserId AND ClientId = :ClientId",new { UserId = UserId, ClientId = ClientId });

            if(QueryResultRecords.Any())
                return QueryResultRecords.First();
            else
                return null;        

    }  
}

可以稱為:

var newClient = MyLab_ClientRef.GetUser(conn, UserId,ClientId);

盡管connection對象是方法的本地對象,並且在using時鍾中使用,這將是首選

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM