Доступ к базе данных .NET / Mono - легкий доступ к столбцам? - PullRequest
0 голосов
/ 23 ноября 2008

Я не уверен, что мне не хватает чего-то гротескно-очевидного или чего-то, но я не могу понять, как эффективно обращаться к таблицам в реляционной базе данных. Я использую 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"];
  }
}

Мне не кажется (и, надеюсь, я где-то упускаю что-то очевидное), что требуется верхний метод доступа к базе данных, и это действительно громоздко, когда вы собираетесь работать с большим количеством отношений ... Итак, есть ли способ сделать что-то ближе к последнему псевдокоду?

Ответы [ 2 ]

1 голос
/ 23 ноября 2008

Если вы хотите просто пойти с ORM Framework.

Если вы хотите максимальной производительности, это должно работать. Просто помните, что кэширование всегда быстрее:)

Лучший пример также быстрее, потому что нет конвертации.

0 голосов
/ 23 ноября 2008

Хех ... оказывается, я должен был просто попробовать , а не спрашивать. Не могу найти никакой документации, чтобы сказать, что это работает, но, кажется, работает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...