使用Dapper將字符串映射到guid

c# dapper orm sql

我正在使用Dapper來敲除一些需要訪問PostgreSQL數據庫的負載測試工具。此特定版本的PostgreSQL本身不支持GUID,因此GUID值存儲為32個字符串。使用someGuid.ToString("N")將值轉換為字符串,可以使用new Guid(stringValueFromColumn)轉換回Guid。

我的問題是如何讓Dapper讀取字符串並將它們轉換回Guids?

我嘗試修改DbType映射,但這不起作用。

一般承認的答案

也許最簡單的方法(沒有等待精緻)是有第二個屬性:

public Guid Foo {get;set;}

public string FooString {
    get { return Foo.ToString("N"); }
    set { Foo = new Guid(value); }
}

在查詢中,將列別名為FooString

當然,這會引發一個問題:應該為這種類型的東西支持私有屬性嗎?我說的話:可能。


熱門答案

這是一個老問題,但我覺得它需要更新,因為Dapper現在支持私有屬性,Marc在他的回答中引用了這些屬性。

private String UserIDString { get; set; }
public Guid UserID
{
    get
    {
        return new Guid(UserIDString);
    }
    private set
    {
        UserID = value;
    }
}

然後在SQL中為您的ID列提供別名,以將其映射到私有屬性,而不是實際屬性:

SELECT UserID AS UserIDString FROM....


許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因
許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因