我不确定我是否遗漏了一些非常明显或者是什么的东西,但我似乎无法弄清楚如何有效地访问关系数据库中的表。我使用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"];
}
}
我似乎并不希望(我希望我只是遗漏了一些显而易见的地方)需要数据库访问的顶级方法,而且当你要处理大量关系时,这真的很麻烦......那么,有没有办法更接近后一种伪代码?
答案 0 :(得分:1)
如果您想轻松使用ORM框架。
如果你想要最高性能,这应该有效。 请记住缓存是最快的:)
顶级示例也更快,因为没有转换。
答案 1 :(得分:0)