Entity Freamwork CodeFirst 连接PostgreSql数据库

EF的Code First是一个比较强大也比较有用的功能,他可以让你先写代码,最后根据代码去生成数据库,非常符合OO设计的要求,抛开数据库层面不管(当然不是完全的不管),只管对象的设计。

首先,说一下我做测试的环境:EF 6.0/PostgreSql 9.2

前提:电脑上装好了PostgreSql数据库以及配置好ODBC数据源,以确保计算机对PostgreSql的支持。

第一步:添加程序对EF的引用,有个偷懒的办法是,添加一个空的Code Fist ADO.NET实体数据模型,这样,VS会自动帮你添加对EF以及相关的DLL的引用

第二步:用Nuget添加对Npgsql For Entity Freamwork的引用,这样子的话,Nuget会自动帮你添加NpgSql和NpgSql.EntityFreamWork的引用,并且会对你的Config文件中添加配置。

第三步:配置Config文件

 1 <?xml version="1.0" encoding="utf-8"?>
 2 <configuration>
 3   <configSections>
 4     <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
 5   </configSections>
 6   <startup>
 7     <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
 8   </startup>
 9   <entityFramework>
10     <defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework">
11       <parameters>
12         <parameter value="v11.0" />
13       </parameters>
14     </defaultConnectionFactory>
15     <providers>
16       <provider invariantName="Npgsql" type="Npgsql.NpgsqlServices, Npgsql.EntityFramework" />
17     </providers>
18   </entityFramework>
19   <system.data>
20     <DbProviderFactories>
21       <remove invariant="Npgsql"/>
22       <add name="Npgsql Data Provider" invariant="Npgsql" description=".Net Data Provider for PostgreSQL" type="Npgsql.NpgsqlFactory, Npgsql, Version=2.2.3.0, Culture=neutral, PublicKeyToken=5d8b90d52f46fda7" support="FF" />
23     </DbProviderFactories>
24   </system.data>
25   <connectionStrings>
26     <add name="ConnectionStr" connectionString="server=127.0.0.1;port=5432;Database=test;uid=*****;pwd=*****" providerName="Npgsql" />
27   </connectionStrings>
28 </configuration>

Config

在这个过程中,我对几个地方有了比较清楚的认识:

1.<add name="ConnectionStr" connectionString="server=127.0.0.1;port=5432;Database=test;uid=postgres;pwd=baixu963." providerName="Npgsql" /> 在这句里面,ProviderName要填写的就是访问数据库的ADO.NET命名空间,比如Sqlserver就是System.Data.SqlClient,MySql就应该是:MySql.Data.MySqlClient,.net访问PostgreSql是由开源项目Npgsql提供的驱动程序,命名空间也是NpgSql,所以,这里的providerName="Npgsql"。

2.在WebConfig中,configSections节点一定要在第一个,不要乱改动他的位置。

3.DbProviderFactories节点:中文含义:数据库供应商工厂,这也是为.net访问数据库提供的一个配置,因为这是微软搞出来的,他对SqlServer的支持,都已经给过默认值了,所以我们平时配置Sqlserver的时候不需要管,但是配置别的一些数据库,那就需要修改了。其中,最重要的就是invariant这个东西了,这个对应的也是数据库的ADO.NET驱动的命名空间。还有Type也需要注意,下面再给出MySql的写法:

1 <DbProviderFactories>
2             <add name="MySQL Data Provider"
3                  invariant="MySql.Data.MySqlClient"
4                  description=".Net Framework Data Provider for MySQL"
5                  type="MySql.Data.MySqlClient.MySqlClientFactory, MySql.Data, Version=5.2.5.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d"/>
6         </DbProviderFactories>

MySql DbProviderFactories

配置文件就到这里吧,下面开始代码的部分。

首先,给出一个Person类:

1  public class Person
2     {
3         [Key]
4         public int Id { get; set; }
5         [StringLength(32)]
6         public string Name { get; set; }
7     }

Person

Id上面的特性标签Key代表这是一个主键,Name上面的StringLength是告诉数据库,这个字段是32个长度。

然后,新建一个DbContext(如果你刚才是通过新建空的Code Fist ADO.NET实体数据模型引用的EF,他会自动帮你建一个Demo出来,你可以直接改那个),不多解释了,直接上代码,

public class EfDbContext : DbContext
{
public EfDbContext()
: base("name=ConnectionStr")
{

}
public virtual DbSet<Person> Person { get; set; }
}

其中Name对应的值是数据库中的连接字符串所对应的Name,然后下面的DbSet<T>就对应着数据库中的一个表,注意这个DbSet一定要是Virtual,EF需要去重写它。

基本的咱们已经写完了,咱们来试试,我这是控制台程序,所以直接是控制台的代码啦,你们随意。

 1 class Program
 2     {
 3         static void Main(string[] args)
 4         {
 5             EfDbContext context=new EfDbContext();
 6             Person person=new Person();
 7             person.Name = "baiyunchen";
 8             context.Person.Add(person);
 9             context.SaveChanges();
10             var p = context.Person.FirstOrDefault(x => x.Name == "baiyunchen") ?? new Person();
11             Console.WriteLine(p.Name);
12             Console.ReadKey();
13         }
14     }

Test Code

等待他输出了P的名字之后,再去看数据库,他已经帮忙自动建库,建表,插入数据,一切OK了。

比较奇怪的是,他新建了个People表,后面我强制给Person类加了[Table="Person"]这样才给我建了Person表,不知道是不是跟哪个关键字冲突了。

另外,我发现,EF在你实体变动了之后,你如果需要处理,会变得异常的麻烦。先写到这里,我得继续研究研究EF了。

时间: 2024-11-01 21:28:42

Entity Freamwork CodeFirst 连接PostgreSql数据库的相关文章

Entity Freamwork 6连接PostgreSql数据库

原文 Entity Freamwork 6连接PostgreSql数据库 开发环境 VS 2015  Update 1   Postgre Sql 9.4 使用过程 1.使用Nuget在项目中添加对EntityFramework6.Npgsql的引用 2.下载并安装NpgsqlDdexProvider程序,下载地址: https://github.com/npgsql/npgsql/releases ,请下载exe文件,他会帮你做很多事情.下载完成后关闭vs,安装下载好的文件,安装完成之后,点击

typescript-koa-postgresql 实现一个简单的rest风格服务器 —— 连接 postgresql 数据库

接上一篇,这里使用 sequelize 来连接 postgresql 数据库 1.安装 sequelize,数据库驱动 pg yarn add sequelize sequelize-typescript pg reflect-metadata 2.新建配置文件夹 conf 及 配置文件 db.conf.ts /** * @name: 数据库配置 * @param : undefined * @return : undefined */ export const dbConfig = { hos

metasploit连接postgresql数据库

metasploit 连接postgresql数据库: 1.打开postgresql服务:services postgresql start 2.进入postgresql中,设置默认用户密码.创建新用户.设置新用户权限.创建数据库: sudo -u postgres psql#进入postgresql默认的用户 alter user postgres with password '密码'; #设置默认用户的登录密码 create user '用户名' wiht password '密码' noc

视频教程--ASP.NET MVC 使用 Petapoco 微型ORM框架+NpgSql驱动连接 PostgreSQL数据库

说好的给园子里的朋友们录制与<ASP.NET MVC 使用 Petapoco 微型ORM框架+NpgSql驱动连接 PostgreSQL数据库> 这篇博客相对应的视频,由于一个月一来没有时间录制,今天我兑现了给朋友们的承诺.. 本次视频教程的目录为 视频.代码.资料,其中视频有4段,资料是我收集的相关资料.. 视频下载地址:http://pan.baidu.com/s/1c05sysC 希望大家多多支持... 郝喜路 2014年6月8日 11:11:02   http://haoxilu.cn

KaLi 之 Metasploit 连接 postgresql 数据库

KaLi 连接 postgresql 数据库 查看 postgresql 是否启动,没有启动的话,使用 service postgresql start 命令启动.启动后查看是否启动成功,端口是 5432,如图所示: 启动 metasploit 后,查看 postgresql 的连接状态,命令是:db_status,如出现如下,证明没有连接. 查看 postgresql 的账户密码,地址是:  cat /opt/metasploit/apps/pro/ui/config/database.yml

BT5之Metasploit[MSF]连接postgresql数据库

1,先查看postgresql的端口,默认是自动开启的,端口7337 .   [email protected]:~# netstat -tnpl |grep postgres tcp        0      0 127.0.0.1:7337          0.0.0.0:*               LISTEN      1100/postgres tcp6       0      0 ::1:7337                :::*                   

SSIS2012连接 PostgreSQL数据库

场景:     公司业务数据库位PostgreSQL数据库,需要用ETL工具(SSIS2012)将数据抽取到数据仓库中 1. SSIS2012 连接 PostgreSQL数据库 两种方法:  .NET Provider for OleDB 和ODBC  ,第一种同事是花钱从老外那边买的插件(如果有朋友有免费的连接适配器,求分享!) 下图为第一种 . 我们这里介绍第二种方式. 2. 下载PostgreSQL的ODBC连接驱动程序.      http://www.postgresql.org/ft

Java连接postgresql数据库

1.下载驱动jar下载地址:https://jdbc.postgresql.org/download.html 2.导入jar包新建lib文件夹,将下载的jar驱动包拖到文件夹中.将jar驱动包添加到Libraries 3.程序代码如下:HelloWorld.java package test; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql

C#远程连接postgresql数据库

第一次在项目中遇到远程访问postgresql数据库的,当时经常会出现连接数据库的错误,连接字符串出现乱码现象 解决方案 在配置文件中添加连接字符串 <add key="Information" value="server=182.76.17.254;Port=5432;Database=wos;uid=postgres;pwd=postgres;Encoding=UNICODE" /> 后台代码 string connectionString = Co