2017-02-19 48 views
1

我已经创建了一个使用Postgres SQL的数据库,我想使用Npgsql ADO.Net提供程序库与此数据库进行交互。我所有的Postgres表和列都使用小写命名,但是,我希望我的C#POCOS具有大写命名。C#POCO类与Postgres数据库和适当的框架(不使用实体框架)

例如,在Postgres中,我的用户表被命名为“users”(复数),并且它有一个user_name列。在C#中,我想用名为UserName的属性将该表和列映射到名为User(单数)的类。

我看到使用数据注释来完成此操作的所有示例都使用EF等ORM,但我不想使用ORM,只是使用原始Npgsql。如果我仅使用没有ORM的Npgsql(raw),数据注释是否可以工作?例如:

[Table("users")] 
class User 
{ 
    [Column("user_name")] 
    [Required] 
    public string UserName { get; set; } 
} 

回答

1

Npgsql不会为您做任何映射 - 它只是负责将您的SQL命令发送到PostgreSQL并为您提供结果。这取决于你写任何你想要的SQL - Npgsql完全不了解你的POCO或你对它们的任何注释。

如果你不想手写SQL,你需要一个O/RM,比如Entity Framework或其他一些映射层。如果你决定编写自己的SQL,建议你看看Dapper。

1

使用QueryFirst(免责声明:我写道)它会根据从您的查询返回的模式生成您的pocos。 poco类的名字是基于你给查询的名字,所以你控制了这个套管。要控制结果集中列的大小写,请使用SQL别名。 (结果列成为生成的POCO中的属性)。没有ORM,没有依赖关系,完全控制你的sql,所有的查询不断的集成测试。所有数据访问都持续进行验证。什么是不喜欢?

+0

谢谢。这看起来不错。 –

+0

Postgres支持是一项新功能,所以我非常热衷于了解您的工作方式。将providerName =“Npgsql”放入您的QfDefaultConnection连接字符串中,然后关闭。 Postgres不会像SQL Server那样报告输入参数的预期类型。如果您希望输入参数具有类型安全性,请将“_typeName”附加到SQL中的参数中,其中类型名称位于[System.Data.DbType](https://msdn.microsoft.com/zh-cn/library/的System.Data.DbType%28V = vs.110%29.aspx?F = 255&MSPPError = -2147217396) – bbsimonbb