Entity Freamwork CodeFirst 连接PostgreSql数据库
EF的Code First是一个比较强大也比较有用的功能,他可以让你先写代码,最后根据代码去生成数据库,非常符合OO设计的要求,抛开数据库层面不管(当然不是完全的不管),只管对象的设计。
首先,说一下我做测试的环境:EF 6.0/PostgreSql 9.2
第一步:添加程序对EF的引用,有个偷懒的办法是,添加一个空的Code Fist ADO.NET实体数据模型,这样,VS会自动帮你添加对EF以及相关的DLL的引用
第二步:用Nuget添加对Npgsql For Entity Freamwork的引用,这样子的话,Nuget会自动帮你添加NpgSql和NpgSql.EntityFreamWork的引用,并且会对你的Config文件中添加配置。
2016年3月21日更新:先通过Nuget添加对EntityFramework6.Npgsql的引用
第三步:配置Config文件
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<configSections>
<section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
</configSections>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
</startup>
<entityFramework>
<defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework">
<parameters>
<parameter value="v11.0" />
</parameters>
</defaultConnectionFactory>
<providers>
<provider invariantName="Npgsql" type="Npgsql.NpgsqlServices, Npgsql.EntityFramework" />
</providers>
</entityFramework>
<system.data>
<DbProviderFactories>
<remove invariant="Npgsql"/>
<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" />
</DbProviderFactories>
</system.data>
<connectionStrings>
<add name="ConnectionStr" connectionString="server=127.0.0.1;port=5432;Database=test;uid=*****;pwd=*****" providerName="Npgsql" />
</connectionStrings>
</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的写法:
<DbProviderFactories>
<add name="MySQL Data Provider"
invariant="MySql.Data.MySqlClient"
description=".Net Framework Data Provider for MySQL"
type="MySql.Data.MySqlClient.MySqlClientFactory, MySql.Data, Version=5.2.5.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d"/>
</DbProviderFactories>
MySql DbProviderFactories
配置文件就到这里吧,下面开始代码的部分。
首先,给出一个Person类:
public class Person
{
[Key]
public int Id { get; set; }
[StringLength()]
public string Name { get; set; }
}
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需要去重写它。
基本的咱们已经写完了,咱们来试试,我这是控制台程序,所以直接是控制台的代码啦,你们随意。
class Program
{
static void Main(string[] args)
{
EfDbContext context=new EfDbContext();
Person person=new Person();
person.Name = "baiyunchen";
context.Person.Add(person);
context.SaveChanges();
var p = context.Person.FirstOrDefault(x => x.Name == "baiyunchen") ?? new Person();
Console.WriteLine(p.Name);
Console.ReadKey();
}
}
Test Code
等待他输出了P的名字之后,再去看数据库,他已经帮忙自动建库,建表,插入数据,一切OK了。
比较奇怪的是,他新建了个People表,后面我强制给Person类加了[Table="Person"]这样才给我建了Person表,不知道是不是跟哪个关键字冲突了。
另外,我发现,EF在你实体变动了之后,你如果需要处理,会变得异常的麻烦。先写到这里,我得继续研究研究EF了。
Entity Freamwork CodeFirst 连接PostgreSql数据库的更多相关文章
- Entity Freamwork 6连接PostgreSql数据库
原文 Entity Freamwork 6连接PostgreSql数据库 开发环境 VS 2015 Update 1 Postgre Sql 9.4 使用过程 1.使用Nuget在项目中添加对E ...
- Abp.NHibernate连接PostgreSQl数据库
Abp.NHibernate动态库连接PostgreSQl数据库 初次接触Abp框架,其框架中封装的操作各类数据的方法还是很好用的,本人还在进一步的学习当中,并将利用abp.NHibernate类库操 ...
- typescript-koa-postgresql 实现一个简单的rest风格服务器 —— 连接 postgresql 数据库
接上一篇,这里使用 sequelize 来连接 postgresql 数据库 1.安装 sequelize,数据库驱动 pg yarn add sequelize sequelize-typescri ...
- 使用EF CodeFirst连接MySql数据库
如何使用EF CodeFirst连接MySql数据库? 我们这篇文章介绍怎么使用EF连接MySql 作者的环境 VS2017.Win10.MySql5.x 前言 一般在EF中,默认是使用SqlServ ...
- ASP.NET MVC 使用 Petapoco 微型ORM框架+NpgSql驱动连接 PostgreSQL数据库
前段时间在园子里看到了小蝶惊鸿 发布的有关绿色版的Linux.NET——“Jws.Mono”.由于我对.Net程序跑在Linux上非常感兴趣,自己也看了一些有关mono的资料,但是一直没有时间抽出时间 ...
- 视频教程--ASP.NET MVC 使用 Petapoco 微型ORM框架+NpgSql驱动连接 PostgreSQL数据库
说好的给园子里的朋友们录制与<ASP.NET MVC 使用 Petapoco 微型ORM框架+NpgSql驱动连接 PostgreSQL数据库> 这篇博客相对应的视频,由于一个月一来没有时 ...
- msf连接PostgreSQL数据库
一.启动PostgreSQL服务######################################################################?root@root:~# ...
- powerdesigner连接postgresql数据库生成pdm及word文档
1.准备软件: powerdesigner165与postgresql的驱动:psqlodbc_11_01_0000 2.安装并破解完成powerdesigner165 参看链接:https://ww ...
- 建立安全SSL连接PostgreSQL数据库服务器
建立安全SSL连接PostgreSQL数据库服务器当前物联网的挑战之一就是提供最高的安全级别.这就是为什么需要开启SSL连接到 PostgreSQL. 当你想要安全的存储数据到PostgreSQL数据 ...
随机推荐
- Java类加载器ClassLoader总结
JAVA类装载方式,有两种: 1.隐式装载, 程序在运行过程中当碰到通过new 等方式生成对象时,隐式调用类装载器加载对应的类到jvm中. 2.显式装载, 通过class.forname()等方法,显 ...
- node.js缓存处理方式
Node.JS缓存处理分为客户端和服务端两个部分. 客户端的缓存主要是利用浏览器对HTTP协议响应头中cache-control和expires字段的支持.浏览器在得到明确的响应头后,会将文件缓存在本 ...
- 滴滴开源 Vue 组件库— cube-ui
cube-ui 是滴滴去年底开源的一款基于 Vue.js 2.0 的移动端组件库,主要核心目标是做到体验极致.灵活性强.易扩展以及提供良好的周边生态-后编译. 自 17 年 11 月开源至今已有 5 ...
- 学习stylus笔记
最近在研究v-cli3.0,发现了一种新的预处理器,于是花了一些时间去学习下. 学习网站 基本上这个网站上,讲的已经很详情.我下面把我在学习之中的笔记和觉得自己用的多方法贴出来. 1.缩排 使用缩排和 ...
- Hnoi2004 金属包裹
传送门 三维凸包模板题……只是听了听计算几何的课之后心血来潮想写的…… 我的做法很无脑是吧……暴力枚举三个点组成的三角形,然后枚举剩下的点,判断其余点是否都在这个三角形的同一侧,是的话则说明这个三角形 ...
- Python-常用模块1
今天我们来看一看python中的常用的模块,内容有点多,我会分两天来更新这些知识 一.什么是模块 模块就是我们把装有特定功能的代码就行归类的结果,从代码编写的单位来看我们的程序,从小到大的顺序:一条代 ...
- google搜索使用技巧
1.输入框所有空格都被理解为加号2.搜索多个单词时,需要加上引号,会当字符串处理3.使用-(减号)剔除指定条件,如:'mongdb'-'nodejs'4.可以使用通配符,如'vue *'5.在指定网站 ...
- 安装Chrome driver/ IE driver
2014-08-15 11:38 22100人阅读 评论(0) 收藏 举报 分类: python基础学习(97) >>>安装Chrome driver chrome driver ...
- CentOS: 将虚拟机迁移到 Azure (以阿里云为例)
Azure 虚拟机能很容易地导出 vhd 并迁移到各种环境中,包含本地及云端环境,或者迁移至其他区域.这为开发.测试.扩展带来了极大的便利.因此本文以阿里云为例,阐述的是如何将 CentOS 6.8 ...
- github基本概念
github: 托管项目代码. 仓库(repository):用来存放项目的代码,每个项目对应一个仓库,多个项目则有多个仓库. 收藏(star):收藏项目的人数.收藏别人的项目方便下次查看. 复制克隆 ...