前言

所谓code first,是代码优先,而不是传统的数据库优先。

code first的好处多多,可不用考虑数据库,只考虑面向对象。下面我们介绍一下code first的配置。

下一篇文章地址:C# Code First 配置(二)

开始

我们这里以建立一个MVC的Code first为例,名字为MVCCodeFirst。

1)建立模型

建立一个数据的新建项,然后选择ADO.NET实体数据模型,名字为MyModel

然后选择Code First模型,空Code First模型,你也可以选择来自数据库的CodeFirst。我们这里选择空CodeFirst模型

确定之后,模型已经建立了

2)建立实体

我们建立一个实体School,有一个主键与学校名字

using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Web; namespace MVCCodeFirst.Entity
{
public class School
{
[Key]
public long Key { get; set; } public string Name { get; set; } }
}

然后把School添加到DbContext的上下文中。

using System.ComponentModel.DataAnnotations;

namespace MVCCodeFirst.Entity
{
using System;
using System.Data.Entity;
using System.Linq; public class MyModel : DbContext
{
public MyModel()
: base("name=MyModel")
{
} //我们添加的School
public virtual DbSet<School> Schools { get; set; }
}
}

3)启动 Enable-Migrations

上面已经建立了表的实体,Code First要创建表,我们要通过命令行来自动生成SQL语句,所以要启动这个功能。

在【程序包管理器控制台】中,启动自动生成SQL语句

Enable-Migrations

如下:

完成之后,你在代码里面可以看到,自动添加了一个文件夹为Migrations,并且类为Configuration.cs

打开可以看到,这里主要用户初识化一些默认的数据

namespace MVCCodeFirst.Migrations
{
using System;
using System.Data.Entity;
using System.Data.Entity.Migrations;
using System.Linq; internal sealed class Configuration : DbMigrationsConfiguration<MVCCodeFirst.Entity.MyModel>
{
public Configuration()
{
AutomaticMigrationsEnabled = false;
} protected override void Seed(MVCCodeFirst.Entity.MyModel context)
{
//初始化数据
}
}
}

例如,我们可以初识化学校的数据。这个初始化数据是在输入命令update-database的时候才会调用

//初始化数据格式
context.Schools.AddOrUpdate(new School() {Key = , Name = "望牛墩中学"});
context.SaveChanges();

4)配置数据库

打开web.config,可以看到数据库连接现在是

<connectionStrings>
<add name="MyModel" connectionString="data source=(LocalDb)\MSSQLLocalDB;initial catalog=MVCCodeFirst.Entity.MyModel;integrated security=True;MultipleActiveResultSets=True;App=EntityFramework" providerName="System.Data.SqlClient" />
</connectionStrings>

我们修改成本地连接

<add name="MyModel" connectionString="Server=localhost; Database=MyModel; Trusted_Connection=True;" providerName="System.Data.SqlClient" />

5)用命令创建数据库、表

初识化数据

add-migration init

就会生成创建的SQL类在Migrations文件夹下

创建数据库、表。在命令中输入:

update-database

我们可以看到本地数据库中有创建了此数据库与表:

3.其他

1)果想指定表的名字,可以在实体类上用注解Table,例如

[Table("School")]
public class School

2)主键注解 [Key]

[Key]
public long Id { get; set; }

3)如果想创建一个自增长的主键

在DB上下文实体中,继承OnModelCreating方法,并且实现实体的主键自增长

using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema; namespace MVCCodeFirst.Entity
{
using System;
using System.Data.Entity;
using System.Linq; public class MyModel : DbContext
{
//您的上下文已配置为从您的应用程序的配置文件(App.config 或 Web.config)
//使用“MyModel”连接字符串。默认情况下,此连接字符串针对您的 LocalDb 实例上的
//“MVCCodeFirst.Entity.MyModel”数据库。
//
//如果您想要针对其他数据库和/或数据库提供程序,请在应用程序配置文件中修改“MyModel”
//连接字符串。
public MyModel()
: base("name=MyModel")
{
} //我们添加的Schools
public virtual DbSet<School> Schools { get; set; } protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
//自增长主键
modelBuilder.Entity<School>()
.Property(o => o.Id)
.HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity);
}
}
}

可以关注本人的公众号,多年经验的原创文章共享给大家。


 

C# Code First 配置的更多相关文章

  1. 在Visual Studio Code中配置GO开发环境

    一.GO语言安装 详情查看:GO语言下载.安装.配置 二.GoLang插件介绍 对于Visual Studio Code开发工具,有一款优秀的GoLang插件,它的主页为:https://github ...

  2. Code::Blocks配置GTK+2和GTK+3

    Code::Blocks配置GTK+2和GTK+3 作者 He YiJun – storysnail<at>gmail.com 团队 ls 版权 转载请保留本声明! 本文档包含的原创代码根 ...

  3. Visual Studio Code中配置GO开发环境

    在Visual Studio Code中配置GO开发环境 一.GO语言安装 详情查看:GO语言下载.安装.配置 二.GoLang插件介绍 对于Visual Studio Code开发工具,有一款优秀的 ...

  4. C# Code First 配置(二)

    上一篇文章地址 C# Code First 配置 此文章主要介绍配置映射到表中的详细字段.信息等,如下: System.ComponentModel.DataAnnotations 包含的特性: At ...

  5. windows通过Visual Studio Code中配置GO开发环境(转)

    一.GO语言安装 详情查看:GO语言下载.安装.配置 二.GoLang插件介绍 对于Visual Studio Code开发工具,有一款优秀的GoLang插件,它的主页为:https://github ...

  6. Visual Studio Code (vscode) 配置 C / C++ 环境

    Visual Studio Code (vscode) 配置 C / C++ 环境 昨天突发奇想,想使用vscode配置C++环境,因为不想下载 Dev OR codeblock,然后借助了很多网上教 ...

  7. VS Code中配置python版本以及Python多版本

    VS Code中配置python版本VS Code十分方便配置python的版本:可以选在在本地setting.json或者全局setting.json文件中配置:python.pythonPath在 ...

  8. 在VS Code下配置Julia

    原来尝试用Sublime text3配置Julia,但是老是会出一些问题,所以直接在VS code下配置了 1.下载Julia 2.安装,安装过程和其他得软件安装一样,可以改变安装路径 3.安装完成后 ...

  9. 在Visual Studio Code 中配置Python 中文乱码问题

    在Visual Studio Code 中配置Python 中文乱码问题 方法一:直接代码修改字符集 添加前四行代码 import io import sys #改变标准输出的默认编码 sys.std ...

随机推荐

  1. 元组(tuple)基本操作

    1.定义元组,Python的元组和列表类似,不同之处在于元组中的元素不能修改(因此元组又称为只读列表),且元组使用小括号而列表使用中括号 dimensions.py , ) print(dimensi ...

  2. Android-Kotlin-递归与尾递归

    递归: 阶乘计算: /** * 阶乘: * 1的阶乘是1,因为1往下走一个楼梯 就是0了 * 2的阶乘是 2*1 * 3的继承是 3*2*1 * 4的继承是 4*3*2*1 * 5的阶乘是 5*4*2 ...

  3. mysql 唯一索引UNIQUE使用方法详解

    创建唯一索引的目的不是为了提高访问速度,而只是为了避免数据出现重复.唯一索引可以有多个但索引列的值必须唯一,索引列的值允许有空值.如果能确定某个数据列将只包含彼此各不相同的值,在为这个数据列创建索引的 ...

  4. IIS日志存入数据库之二:ETW

    在上一篇文章<IIS日志存入数据库之一:ODBC>中,我提到了ODBC方式保存的缺点,即:无法保存响应时间以及接收和响应的字节数. 如果一定要获取响应时间以及接收和响应的字节数的话,就要另 ...

  5. nginx-1.12.0版本(编译安装)-自定义安装路径

    nginx-1.12.0版本(编译安装)-自定义安装路径 安装路径:/application/nginx-1.12.0 1.前期准备 安装编译需要的gcc和gcc-c++ yum install -y ...

  6. AJPFX:外汇的爆仓和追加保证金

    在外汇交易中,当可用保证金变成0时,账户即会爆仓.而为了防止爆仓,您可以在可用保证金不足时追加保证金以防止爆仓. 例如,您在AJPFX的账户是100倍的杠杆,一手欧美货币对合约为10万美金(1 LOT ...

  7. VMware中安装Contos

    1 检查BIOS虚拟化支持 2 新建虚拟机 3 新建虚拟机向导 4 创建虚拟空白光盘 5 安装Linux系统对应的CentOS版 6 虚拟机命名和定位磁盘位置 7 处理器配置,看自己是否是双核.多核 ...

  8. dubbo实现原理之SPI简介

    dubbo采用微内核+插件体系,设计优雅,扩展性很强.微内核+插件体系是如何实现的呢?想必大家都知道SPI(service provider interface)机制.这种机制的原理是假如我们定义了服 ...

  9. underscore.js源码研究(8)

    概述 很早就想研究underscore源码了,虽然underscore.js这个库有些过时了,但是我还是想学习一下库的架构,函数式编程以及常用方法的编写这些方面的内容,又恰好没什么其它要研究的了,所以 ...

  10. Java - Junit单元测试框架

    简介 Junit : http://junit.org/ JUnit是一个开放源代码的Java语言单元测试框架,用于编写和运行可重复的测试. 多数Java的开发环境都已经集成了JUnit作为单元测试的 ...