Я не уверен, что мне не хватает чего-то гротескно-очевидного или чего-то, но я не могу понять, как эффективно обращаться к таблицам в реляционной базе данных. Я использую PostgreSQL для сервера базы данных (и Npgsql для его доступа) и C # с Mono 2.0.
Допустим, у меня есть таблица, созданная следующими операторами CREATE TABLE
и INSERT
.
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"];
}
}
Мне не кажется (и, надеюсь, я где-то упускаю что-то очевидное), что требуется верхний метод доступа к базе данных, и это действительно громоздко, когда вы собираетесь работать с большим количеством отношений ... Итак, есть ли способ сделать что-то ближе к последнему псевдокоду?