2008-11-23 38 views
0

我不確定我是否缺少明顯或明顯的東西,但似乎無法弄清楚如何高效地訪問關係數據庫中的表。我使用PostgreSQL數據庫服務器(和爲Npgsql的其接入)和C#與單聲道2.0。.NET/Mono數據庫訪問 - 輕鬆訪問列嗎?

假設我有由以下CREATE TABLEINSERT語句創建的表格。

CREATE TABLE foo (
    id UUID NOT NULL PRIMARY KEY, 
    bar VARCHAR(20) NOT NULL, 
    baz INT NOT NULL 
) 

INSERT INTO foo VALUES ('f42d3178-b900-11dd-ac23-001966607b2e', 'foo!', 1); 

我的理解是迄今爲止的方式,我有(C#):

using(NpgsqlConnection dbc = new NpgsqlConnection(connectionString)) { 
    using(NpgsqlCommand cmd = new NpgsqlCommand("SELECT * FROM foo LIMIT 1", dbc)) { 
    NpgsqlDataReader rdr = cmd.ExecuteReader(); 

    if(!rdr.HasRows()) 
     throw new Exception("No rows"); 

    rdr.Read(); 

    Guid id = rdr.GetGuid(0); 
    string bar = rdr.GetString(1); 
    int baz = rdr.GetString(2); 
    } 
} 

但是,我真的很想做的是類似下面的僞代碼:

using(NpgsqlConnection dbc = new NpgsqlConnection(connectionString)) { 
    using(NpgsqlCommand cmd = new NpgsqlCommand("SELECT * FROM foo LIMIT 1", dbc)) { 
    NpgsqlDataReader rdr = cmd.ExecuteReader(); 

    if(!rdr.HasRows()) 
     throw new Exception("No rows"); 

    rdr.Read(); 

    Guid id = (Guid)rdr["id"]; 
    string bar = (string)rdr["bar"]; 
    int baz = (int)rdr["baz"]; 
    } 
} 

在我看來(並希望我只是錯過某些地方顯而易見的東西),需要數據庫訪問的頂級方法,而當您要處理大量關係時真的很麻煩ns ...那麼,有沒有辦法更接近後者的僞代碼?

回答

1

如果你想輕鬆去與ORM框架。

如果你想最大性能這應該工作。 只記得緩存是最快的:)

頂部的例子也更快,因爲沒有轉換。

+0

事實證明,第二個作品有點不同比我想象的。至少NpgsqlDataReader,對象已經輸入,並訪問,好像他們是一本字典。因此,對於上面的示例,rdr [「id」]已經是System.Guid。我想,非常酷,只是醫生的命令。 :) – 2008-11-23 03:20:26

0

嘿...原來我剛纔應該試圖它,而不是要求。找不到任何文件說它可以工作,但它似乎工作。