一.概要

本文主要是学习CodeFirst思想。技术上的实现是C#(.net framework4.6.1) 控制台 + PostgreSQL 10.2.1

代码:https://pan.baidu.com/s/1ggzHRub

二.实现过程

1.新建控制台

2.添加nuget包:EntityFramework6.Npgsql,还有很多次要包,依据代码需要增加

3.app.config配置,依据每个人的不同情况自行更改

<system.data>
<DbProviderFactories>
<add name="Npgsql Data Provider" invariant="Npgsql" description="Data Provider for PostgreSQL" type="Npgsql.NpgsqlFactory, Npgsql" />
</DbProviderFactories>
</system.data>
<connectionStrings>
<add name="Postgresql" connectionString="Server=localhost;Port=5432;User Id=postgres;Password=123456;Database=TestDB;Pooling=true;" providerName="Npgsql" />
</connectionStrings>

4.新建一个类(不是重点)

5.新建这个类的context继承自DbContext(关键)

public class DonatorContext : DbContext
{
  public DonatorContext() : base("Postgresql") { }//从配置connectionString获取名称为Postgresql的数据库连接信息

  public DbSet<Donator> donators { get; set; }//表名,可修改

  protected override void OnModelCreating(DbModelBuilder modelBuilder)
  {
    modelBuilder.HasDefaultSchema("public");//设置模式
    modelBuilder.Entity<Donator>().ToTable("donators");//修改表名
    modelBuilder.Entity<Donator>().HasKey(t => t.donator_id);//设置key
    modelBuilder.Entity<Donator>().Property(t => t.donator_id).HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity);//donator_id自增长
  }
}

6.在program中实现类生成数据库表(CodeFirst)

donatorContext.Database.CreateIfNotExists();//如果数据库不存在时则创建
donatorContext.donators.Create();
var d = new Donator()
{
  donator_id = 88,
  amount = 2,
  name = "128",
  donate_date = DateTime.Now
};
donatorContext.donators.Add(d);
donatorContext.SaveChanges();
三.总结

上面是主要过程,可以实现CodeFirst思想。但还有个问题,每次新增数据,必须不存在数据库从0开始;如果存在数据库,插入数据一直报错。id不为空,非常奇怪。

CodeFirst学习笔记的更多相关文章

  1. EF CodeFirst学习笔记004--足够聪明

    将BlogTypes注释掉,但因为Blogs中定义了BlogType 这样类型的属性,所以Ef会聪明的找到BlogType类. public class BlogEntities:DbContext ...

  2. EF CodeFirst学习笔记003--如何创建表

    参考: http://www.cnblogs.com/Wayou/archive/2012/09/20/EF_CodeFirst.html webconfig中修改: <connectionSt ...

  3. EF CodeFirst学习笔记002--更新数据库表

    BlogEntities这个类从DbContext继承,负责数据库的更新. Database.SetInitializer(new DropCreateDatabaseIfModelChanges&l ...

  4. EF CodeFirst学习笔记001--主键约定

    Code First 的核心是约定,这些默认的规则使我们可以用我们自己的类来创建模型.EF框架要求一个类必须有一个键属性.规则约定如果一个属性名为Id或者是类名+Id的形式(如PatientId),这 ...

  5. C# 动态生成word文档 [C#学习笔记3]关于Main(string[ ] args)中args命令行参数 实现DataTables搜索框查询结果高亮显示 二维码神器QRCoder Asp.net MVC 中 CodeFirst 开发模式实例

    C# 动态生成word文档 本文以一个简单的小例子,简述利用C#语言开发word表格相关的知识,仅供学习分享使用,如有不足之处,还请指正. 在工程中引用word的动态库 在项目中,点击项目名称右键-- ...

  6. MVC_学习笔记_2_Authorize

    MVC5_学习笔记_2_Authorize/* GitHub stylesheet for MarkdownPad (http://markdownpad.com) *//* Author: Nico ...

  7. js学习笔记:webpack基础入门(一)

    之前听说过webpack,今天想正式的接触一下,先跟着webpack的官方用户指南走: 在这里有: 如何安装webpack 如何使用webpack 如何使用loader 如何使用webpack的开发者 ...

  8. PHP-自定义模板-学习笔记

    1.  开始 这几天,看了李炎恢老师的<PHP第二季度视频>中的“章节7:创建TPL自定义模板”,做一个学习笔记,通过绘制架构图.UML类图和思维导图,来对加深理解. 2.  整体架构图 ...

  9. PHP-会员登录与注册例子解析-学习笔记

    1.开始 最近开始学习李炎恢老师的<PHP第二季度视频>中的“章节5:使用OOP注册会员”,做一个学习笔记,通过绘制基本页面流程和UML类图,来对加深理解. 2.基本页面流程 3.通过UM ...

随机推荐

  1. CentOS常用命令大全

    一:使用CentOS常用命令查看cpumore /proc/cpuinfo | grep "model name" grep "model name" /pro ...

  2. 在OS X系统中php访问sftp时需要ssh2扩展的安装

    php -v brew install homebrew/php/php55-ssh2 [实现方式] <?php $connection = ssh2_connect('192.168.0.14 ...

  3. 关于DOM与BOM的总结

    1.什么是BOM,什么是DOM(基本概念) BOM: Browers Object MOdel           浏览器对象模型 DOM: Document Object MOdel         ...

  4. 关于echarts 报错 初始化对象未定义

    <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title&g ...

  5. 从零开始学Python--数据类型之字符串

    一.Python中的数据类型 ·   整数, 如 1 -100 ·   长整数, 是比较大的整数,Python 2里面有long长整数:Python 3里面没有 ·   浮点数 如 1.23.3E-2 ...

  6. Tomcat8.5.24日志自动清理(maxDays)功能探究

    前言 测试人员反馈tomcat目录下的日志占用空间很大,需要自动清理.接到这个反馈时,想象着应该是一个很简单的功能,tomcat应该已经实现了日志的自动清理功能.于是乎,我先到网上查询了如何自动清除t ...

  7. CodeForces-747C

    直接模拟就行,用一个数组保存某个server上次是在哪个task里面即可很方便判断它现在是否可用. AC代码: #include<cstdio> #include<cstring&g ...

  8. 用线性单元(LinearUnit)实现工资预测的Python3代码

    功能:通过样本进行训练,让线性单元自己找到(这就是所谓机器学习)工资计算的规律,然后用两组数据进行测试机器是否真的get到了其中的规律. 原文链接在文尾,文章中的代码为了演示起见,仅根据工作年限来预测 ...

  9. Win10电脑经常自动掉线、自动断网的解决方法

    近期一客户称自己使用电脑上网的时候,过一段时间莫名其妙的出现自动掉线.自动断网的情况,那么遇到这个问题该怎么办?下面装机之家分享一下Win10电脑经常自动掉线.自动断网的解决方法,以Win7系统为例. ...

  10. 面向对象的线程池Threadpool的封装

    线程池是一种多线程处理形式,预先创建好一定数量的线程,将其保存于一个容器中(如vector), 处理过程中将任务添加到队列,然后从容器中取出线程后自动启动这些任务,具体实现如下. 以下是UML图,展示 ...