[英]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();
檢查以下鏈接以了解原因:
如上面的第一個鏈接所示,最好的選擇仍然是從給定的方法返回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.