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数据库的更多相关文章

  1. Entity Freamwork 6连接PostgreSql数据库

    原文 Entity Freamwork 6连接PostgreSql数据库 开发环境 VS 2015  Update 1   Postgre Sql 9.4 使用过程 1.使用Nuget在项目中添加对E ...

  2. Abp.NHibernate连接PostgreSQl数据库

    Abp.NHibernate动态库连接PostgreSQl数据库 初次接触Abp框架,其框架中封装的操作各类数据的方法还是很好用的,本人还在进一步的学习当中,并将利用abp.NHibernate类库操 ...

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

    接上一篇,这里使用 sequelize 来连接 postgresql 数据库 1.安装 sequelize,数据库驱动 pg yarn add sequelize sequelize-typescri ...

  4. 使用EF CodeFirst连接MySql数据库

    如何使用EF CodeFirst连接MySql数据库? 我们这篇文章介绍怎么使用EF连接MySql 作者的环境 VS2017.Win10.MySql5.x 前言 一般在EF中,默认是使用SqlServ ...

  5. ASP.NET MVC 使用 Petapoco 微型ORM框架+NpgSql驱动连接 PostgreSQL数据库

    前段时间在园子里看到了小蝶惊鸿 发布的有关绿色版的Linux.NET——“Jws.Mono”.由于我对.Net程序跑在Linux上非常感兴趣,自己也看了一些有关mono的资料,但是一直没有时间抽出时间 ...

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

    说好的给园子里的朋友们录制与<ASP.NET MVC 使用 Petapoco 微型ORM框架+NpgSql驱动连接 PostgreSQL数据库> 这篇博客相对应的视频,由于一个月一来没有时 ...

  7. msf连接PostgreSQL数据库

    一.启动PostgreSQL服务######################################################################?root@root:~# ...

  8. powerdesigner连接postgresql数据库生成pdm及word文档

    1.准备软件: powerdesigner165与postgresql的驱动:psqlodbc_11_01_0000 2.安装并破解完成powerdesigner165 参看链接:https://ww ...

  9. 建立安全SSL连接PostgreSQL数据库服务器

    建立安全SSL连接PostgreSQL数据库服务器当前物联网的挑战之一就是提供最高的安全级别.这就是为什么需要开启SSL连接到 PostgreSQL. 当你想要安全的存储数据到PostgreSQL数据 ...

随机推荐

  1. 紫书第5章 C++STL

    例题 例题5-1 大理石在哪儿(Where is the Marble?,Uva 10474) 主要是熟悉一下sort和lower_bound的用法 关于lower_bound: http://blo ...

  2. UNIX 5种I/O模型

    Unix 5 I/O模型 I/O操作分为两步: (1)先将数据从 存储介质 (磁盘或者网络等)拷贝到 内核缓冲区,此时称为数据准备好,可以被用户读取. (2)由用户应用程序拷贝内核缓冲区数据 到用户缓 ...

  3. 二、NAT(地址转换模式)

    刚刚我们说到,如果你的网络ip资源紧缺,但是你又希望你的虚拟机能够联网,这时候NAT模式是最好的选择.NAT模式借助虚拟NAT设备和虚拟DHCP服务器,使得虚拟机可以联网.其网络结构如下图所示: NA ...

  4. 《Visual C++ 2010入门教程》系列五:合理组织项目、使用外部工具让工作更有效

    原文:http://www.cnblogs.com/Mrt-02/archive/2011/07/24/2115631.html 这一章跟大家分享一些与c++项目管理.VAX.SVN.VS快捷键等方面 ...

  5. C++的字符串分割函数

    原文: C++的字符串没有分割函数,因此需要自己写方便使用.而受到开发工具的影响,有很多用起来比较麻烦啦,下面这个比较不错奥. 用STL进行字符串的分割 涉及到string类的两个函数find和sub ...

  6. Jmeter对HTTP请求压力测试、并发测试

    最近公司需要开发一个简单的报名系统,供外网用户提供报名服务,由于我们公司是个初创的微型公司,开发人员都是刚毕业不久,开发经验相当缺乏. 对于服务器性能测试这块的经验更是少得可以忽略.迫使不得不让我们去 ...

  7. NgModelController: $setViewValue,$render,Formatter, Parser

    NgModelController为ngModel directive提供了API.这个controller包含了关于data-binding,validation,css update, value ...

  8. pt-archiver(数据导入导出工具)

    数据导入导出工具pt-archiver 工具可以将MySQL的表数据导出到一个新表或者一个文件,也有自己的应用场景,比如数据归档,删除数据,数据合并等. 具体用法: pt-archiver [OPTI ...

  9. 使用WdatePicker日期组件时,选择日期后,执行某个方法

    WdatePicker({onpicked:function(){alert(123);},dateFmt:'yyyy年MM月dd日',maxDate:'%y-%M-%d'}) 1.onpicked: ...

  10. Yii框架记录

    Yii框架记录 Yii 结构 使用yii开发一段时间,发现自身知其形不知其意,重温了下yii,理解框架,也可以梳理自己的知识库,借鉴成长,阶段性总结如下: 模型 模型是MVC模式中的一部分,是表现业务 ...