环境:Visual studio2013+sql server本地数据库

创建一个C#应用程序,首先在nuget中添加Entity Framework

接下来的工作分为四个主要部分:

第一部分:App.config

这个文件在创建时会自动生成,我们要做的是在其中增加一个代表数据库连接字符串的标签

格式:

<connectionStrings>
<add name="CodeFirstDemo" connectionString="Server=DESKTOP-NJVJDDB;Database=mydatabase01;IntegratedSecurity=SSPI" providerName="System.Data.SqlClient"/>
</connectionStrings>

添加到<configuration>标签下

格式的解释:

在<connectionStrings>中有一些固定的属性值,可以看定义了解。其中必须的为name属性和connectionString属性,其余属性均为可选项

name:代表这个<connectionStrings>的名字,主要作用是在其他地方引用时使用

connectionString:用于配置和数据库的连接。主要有三个属性:

  • DataSource(Server):数据库服务器名
  • InitialCatalog(Database):服务器中的数据库名
  • IntegratedSecurity:安全策略,有五个值:true/yes/false/no/SSIP,其中SSIP和true的含义是一样的,都是指将安全策略设置为Windows身份验证,这时设置的user id和password将不起作用。否则将是用用户名和密码登陆数据库的安全策略

第二部分:实体类文件

这是一系列C#类文件,和数据库的表对应,其中的属性对应于表的属性,用于在工作空间中存储数据,在最终生成程序时会根据这个生成表

值得注意的是,数据库在创建表时主键会默认为自增,这时插入数据会自动生成主键值,插入主键会导致异常,要设置为非自增才可以自主设置主键

在实体类的主键前加入:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.ComponentModel.DataAnnotations.Schema;//设置生成表属性使用的命名空间 namespace MiniProfilerDemo.Models
{
public class Install
{
[DatabaseGenerated(System.ComponentModel.DataAnnotations.Schema.DatabaseGeneratedOption.None)]//这是设置不自动增长的语句
public int ID { get; set; }
public string City { get; set; }
public string Type { get; set; } public Install(int ID,string City,string Type)
{
this.ID = ID;
this.City = City;
this.Type = Type;
}
public Install() { }
}
}

第三部分:Context文件

这个文件是要自己创建一个C#类文件

继承自DbContext类,这个类是用于连接数据库和程序的中介,用于查询数据库或是将更改组合成一个单元再写回数据库

A DbContext instance represents acombination of the Unit Of Work and Repository patterns such that it can beused to query from a database and group together changes that will then bewritten back to the store as a unit.

构造函数:在创建这个类的时候创建对数据库的连接,调用其父类(DbContext)的构造方法:

//public DbContext(stringnameOrConnectionString);

/*Constructs a new context instance using the given string as the name or connection string
for the database to which aconnection will be made.
See the class remarks for how this is used to create a connection.*/
//如:
public EFDbContext() : base("name =ASimpleDB") { }

参数用于索引在App.config添加的数据库连接字符串

数据(DBSET):

由如下的属性组成,T表示实体类名,这些属性组成DbContext代表的数据库

public DbSet<T> T { get; set; }…

Mapper类添加:如果在程序中还添加了Mapper类文件,那么就要在这里将类文件加入到Context文件中。这个部分不是必要的

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Configurations.Add(new InstallMapper());//添加映射,InstallMapper就是我添加的Mapper类文件
}//映射

我的Context文件示例:

//DbContext数据库上下文,定义了从实体对象到数据库的映射,从数据库中检索数据,就要使用它。
using System;
using System.Collections.Generic;
using System.Data.Entity;
using System.Data.Entity.Core.Objects;
using System.Data.Entity.Infrastructure;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
//我的程序的命名空间
using MiniProfilerDemo.Models;
using MVCDemo.Mapper;
namespace MiniProfilerDemo.DAL
{
public class EFDbContext : DbContext//继承自DbContext
{
//构造函数: public DbContext(string nameOrConnectionString);
//base调用基类构造函数,参数为nameOrConnectionString
//本函数使用的是ConnectingString,位置在Web.config
//name是指这个连接的名字
public EFDbContext() : base("name = ASimpleDB") { } //添加实体类,表示工作空间的数据区
#region DBSET
public DbSet<Install> Install { get; set; }
#endregion //添加Mapper类,将数据库映射到类
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Configurations.Add(new InstallMapper());//添加映射
}//映射
}//class
}

第四部分:控制逻辑

既然是一个简单的实例,那么就在自动生成的主程序入口program.cs中添加控制逻辑

在执行之前需要创建一个DbContext类,并以此类来操作

需要注意的是,在执行对数据库的修改操作之后还要调用.SaveChanges()方法来保存更改

示例:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
//我的程序的命名空间
using CodeFirstDemo.Model;
namespace CodeFirstDemo
{
class Program
{
static void Main(string[] args)
{
using (var context = new CodeFirstContext())//创建一个context对象
{
context.Database.CreateIfNotExists();//如果数据库不存在时则创建
TRoles t = new TRoles();
t.Id = 1;
t.RoleName = "aa";
context.Roles.Add(t);//在Roles表中添加条目
context.SaveChanges();//保存添加
}
Console.Write("DB has Created!");//提示DB创建成功
Console.Read();
}//Main
}//class Program
}//namespace

(可选)第五部分:Mapper文件

设置Mapper类,每一个实体类对应一个Mapper类

继承自EntityTypeConfiguration<实体类名>

在其中创建无参的构造函数,在其中进行对应的实体类和数据库表的映射。用其父类的方法来设置映射的表、属性和设置主键等

如:this.ToTable(“表名”):将这个实体类映射到数据库的参数代表的表

需要注意的是:

Mapper文件中的this.ToTable();方法有两种

//第一种:代表的数据库名:tableName

public EntityTypeConfiguration<TEntityType>ToTable(string tableName);

//第二种:这种代表的数据库名会有一个前缀即 schemeName.tableName

public EntityTypeConfiguration<TEntityType>ToTable(string tableName, string schemaName);

示例:

using System;
using System.Collections.Generic;
using System.Data.Entity.ModelConfiguration;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Web;
//我的程序的命名空间
using MiniProfilerDemo.Models;
namespace MVCDemo.Mapper
{
internal class InstallMapper : EntityTypeConfiguration<Install>
{
internal InstallMapper()
{
this.ToTable("Install");
this.HasKey(t => t.ID ); this.Property(t => t.ID).HasColumnName("ID");
this.Property(t => t.City).HasColumnName("City");
this.Property(t => t.Type).HasColumnName("Type");
}
}
}

源码:

https://github.com/biaoJM/ASP.NET-MVC-DEMO/tree/master/MVCDemo/MVCDemo

Entity Framework的一个实例的更多相关文章

  1. Entity Framework 的小实例:在项目中添加一个实体类,并做插入操作

    Entity Framework 的小实例:在项目中添加一个实体类,并做插入操作 1>. 创建一个控制台程序2>. 添加一个 ADO.NET实体数据模型,选择对应的数据库与表(Studen ...

  2. 实体框架(Entity Framework)快速入门--实例篇

    在上一篇 <实体框架(Entity Framework)快速入门> 中我们简单了解的EF的定义和大体的情况,我们通过一步一步的做一个简单的实际例子来让大家对EF使用有个简单印象,看操作步骤 ...

  3. 分享使用Entity Framework的一个坑:Include无效

    如果不想延迟加载,可以通过设置:context.Configuration.LazyLoadingEnabled = false;或查询时加上AsNoTracking()方法即可. 如果不想生成代理, ...

  4. Entity Framework的一个坑

    由于业务需要写了一个批量数据导入工具.中间踩了一个坑 问: 1. SaveChange 实体A 发生pk冲突,异常了.2.记录日志3.不让退出程序,继续处理下一个实体4.Add新的实体B5.再次调用S ...

  5. 8天掌握EF的Code First开发之Entity Framework介绍

    返回<8天掌握EF的Code First开发>总目录 本篇目录 Entity Framework概要 什么是ORM Entity Framework简史 Entity Framework具 ...

  6. Entity Framework Core 1.1 Preview 1 简介

    实体框架核心(EF Core)是Entity Framework的一个轻量级,可扩展和跨平台版本. 10月25日,Entity Framework Core 1.1 Preview 1发布了. 升级到 ...

  7. MVC5 Entity Framework学习之Entity Framework高级功能(转)

    在之前的文章中,你已经学习了如何实现每个层次结构一个表继承.本节中你将学习使用Entity Framework Code First来开发ASP.NET web应用程序时可以利用的高级功能. 在本节中 ...

  8. Entity Framework 全面教程详解(转)

    目录 预备知识    2 LINQ技术 2 LINQ技术的基础 - C#3.0    2 自动属性    2 隐式类型    2 对象初始化器与集合初始化器    3 匿名类    3 扩展方法    ...

  9. 转载 8天掌握EF的Code First开发之Entity Framework介绍

    转载原地址:  http://www.cnblogs.com/farb/p/IntroductionToEF.html Entity Framework概要 Entity Framework是微软的O ...

随机推荐

  1. awesome python 中文版 相见恨晚!(pythonNB的第三方资源库)

    Awesome Python中文版来啦! 原文链接:Python 资源大全 内容包括:Web框架.网络爬虫.网络内容提取.模板引擎.数据库.数据可视化.图片处理.文本处理.自然语言处理.机器学习.日志 ...

  2. BZOJ 2301 莫比乌斯函数+分块

    思路: 同BZOJ1101 就是加个容斥 - http://blog.csdn.net/qq_31785871/article/details/54340241 //By SiriusRen #inc ...

  3. (转载)Android之有效防止按钮多次重复点击的方法(必看篇)

    为了防止测试妹子或者用户频繁点击某个按钮,导致程序在短时间内进行多次数据提交or数据处理,那到时候就比较坑了~ 那么如何有效避免这种情况的发生呢? 我的想法是,判断用户点击按钮间隔时间,如果间隔时间太 ...

  4. Monitor (synchronization)条件变量-安全对象

    In concurrent programming, a monitor is a synchronization construct that allows threads to have both ...

  5. 2013-11-02 【webrebuild广州站】分享会纪要

    为了不让自己沉浸个人的技术研究当中,也为了多去接触业界新技术新思想,今天去参加了webrebuild广州站的一个分享交流会,效果不错,有一些获益.听了四个主题,依据个人获取信息的情况来做个纪要(比较粗 ...

  6. c traps and pitfalls reading notes(2)

    1.运算符优先级,这个我是肯定记不住,每次遇到的时候都纠结下,然后去查下,或者直接括号,但是括号太多,你懂得,要用notepad才能理清各种层次.这里啦个下来,留着参考.

  7. AWS中国EC2 公网IP登录免pemKEY修改shh 配置文件

    个人使用记录 1:KEY 授权 chmod 400 VPN.pem 2:连接 ssh -i "VPN.pem" ubuntu@ec2-54-183-119-93.us-west-1 ...

  8. eclipse/myeclipse中js/java的自动提示只有4个字符怎么解决

    https://blog.csdn.net/LinBM123/article/details/80450690

  9. Python3+Gurobi使用教程(一)

    Gurobi使用教程 1.Gurobi使用的一般框架 from gurobipy import * try: m=Model('modelname') except GurobiError: prin ...

  10. man 7 glob

    GLOB(7) Linux Programmer's Manual GLOB(7) NAME glob - 形成路径名称 描述 (DESCRIPTION) 很久以前 在 UNIX V6 版 中 有一个 ...