EF-CodeFirst模式的简单使用
要求:
引用EntityFramework
SqlServer数据库
一个C#项目
项目结构:
将实体模型映射到数据库,只需要在下面三个地方进行配置、
实体类(数据库映射)
DbContext上下文(存储库)
数据库连接字符串配置
1、实体类(数据库映射)
每个数据库对象在程序中都有一个类可以对应。
需要的了解的知识:类和数据库映射相关的知识。
例子:
一个数据库映射类
public class TModel
{
[Key]//标记主键
public int ID{get;set;} public string Name{get;set;} [NotMap]//因为直接把Model和数据库映射Model作为同一个,所以存在部分差异,这个字段不需要保存,所以配置为不映射到数据库
public string ShowInfo{get;set;}
}
2、实现 DbContext
DBContext 实现了工作单元模式和存储库模式,也就是说这个可以代替一个表一个Repository的方式,直接在DbContext中定义表结构就可以直接使用了。
数据库生成功能就是在该类中实现。
工作单元模式:对象可以在程序中更改,等到SaveChange 时才保存到数据库。
把一系列业务对象的持久化由工作单元实现类统一在一个类管理,而不用为每个数据库对象建一个仓储层。
例子:
定义一个上下文。
public class TestContext : System.Data.Entity.DbContext
{
public TestContext() : base("LogStr")//LogStr为web.config中的链接字符串。有多种设置链接的方式。
{
//设置初始化方式,可以使用的策略类有:
//CreateDatabaseIfNotExists 如果不存在数据库,建立数据库;
//DropCreateDatabaseAlways 总是重建数据库;
//DropCreateDatabaseIfModelChanges 如果定义的模型发生改变,重建数据库。
//不设置该项,当模型发生改变时,查询时会报错。当数据库不存在时,创建数据库
Database.SetInitializer(new CreateDatabaseIfNotExists<TestContext>());
} //使用属性的方式-映射的数据表对象
public DbSet<TModel> TModels { get; set; } //自定义映射关系,可省略,常用于各种骚操作,一个发挥想象力的地方。
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
//常见的操作
//1、以反射的信息添加表,如某一程序集中的类,动态添加映射到数据库中,可以不使用属性。
//2、自定义映射模式,如外键关系等映射模式,属性名和表名的映射关系。
}
}
例子:
手动重建数据库。
using (TestContext logContext = new TestContext())
{
logContext.Database.Initialize(true);
}
3、Web.Config或App.config中配置链接字符串
EF-CodeFirst模式的简单使用的更多相关文章
- EF CodeFirst系列(6)---配置1对1,1对多,多对多关系
这一节介绍EF CodeFirst模式中的1对0/1,1对多,多对多关系的配置,只有梳理清楚实体间的关系,才能进行愉快的开发,因此这节虽然很简单但是还是记录了一下. 1. 1对0/1关系配置 1. 通 ...
- EF CodeFirst系列(1)---CodeFirst简单入门
1.什么是CodeFirst 从EF4.1开始,EF可以支持CodeFirst开发模式,这种开发模式特别适用于领域驱动设计(Domain Driven Design,大名鼎鼎的DDD).在CodeFi ...
- 第十四节: EF的三种模式(四) 之 原生正宗的 CodeFirst模式的默认约定
一. 简介 1. 正宗的CodeFirst模式是不含有edmx模型,需要手动创建实体.创建EF上下文,然后生成通过代码来自动映射生成数据库. 2. 旨在:忘记SQL.忘记数据库. 3. 三类配置:On ...
- 第十三节: EF的三种模式(三) 之 来自数据库的CodeFirst模式
一. 简介 [来自数据库的Code First模式]实质上并不是CodeFirst模式,而是DBFirst模式的轻量级版本,在该模式中取消了edmx模型和T4模板,直接生成了EF上下文和相应的类,该模 ...
- 第十七节: EF的CodeFirst模式的四种初始化策略和通过Migration进行数据的迁移
一. 四种初始化策略 EF的CodeFirst模式下数据库的初始化有四种策略: 1. CreateDatabaseIfNotExists:EF的默认策略,数据库不存在,生成数据库:一旦model发生变 ...
- EF的CodeFirst模式自动迁移(适用于开发环境)
EF的CodeFirst模式自动迁移(适用于开发环境) 1.开启EF数据迁移功能 NuGet包管理器------>程序包管理控制台---------->Enable-Migrations ...
- 6.Configure Domain Classes(配置领域类)【EF Code-First 系列】
在前面的部分中,我们学习了Code-First默认约定,Code-First使用默认的约定,根据你的领域类,然后生成概念模型. Code-First模式,发起了一种编程模式:约定大于配置.这也就是说, ...
- [.NET领域驱动设计实战系列]专题一:前期准备之EF CodeFirst
一.前言 从去年已经接触领域驱动设计(Domain-Driven Design)了,当时就想自己搭建一个DDD框架,所以当时看了很多DDD方面的书,例如领域驱动模式与实战,领域驱动设计:软件核心复杂性 ...
- EF CodeFirst系列(3)---EF中的继承策略(暂存)
我们初始化数据库一节已经知道:EF为每一个具体的类生成了数据库的表.现在有了一个问题:我们在设计领域类时经常用到继承,这能让我们的代码更简洁且容易管理,在面向对象中有“has a”和“is a”关系 ...
- EF CodeFirst学习
EF CodeFirst 真是时光如梦,岁月如歌,自己一不留神就被后浪拍在了沙滩上,就连我要学的这个东西也是12年就在博客园很火了. EF有三种开发模式,DatabaseFirst, ModelFir ...
随机推荐
- OpenCV---像素运算
像素运算 分为算术运算和逻辑运算 算术运算: 加减乘除 调节亮度 调整对比度 逻辑运算: 与或非 遮罩层控制 一:算术运算 import cv2 as cv import numpy as np de ...
- Jenkins使用教程之创建job
第一部分:常规设置(general) 1.点击新建,进入新建项目页面 2.输入项目名称,选择构建一个自由风格的软件项目(里面可以自己自由进行配置,使用更加灵活),点击ok 3.项目名称与描述 4.gi ...
- LightOJ 1017 - Brush (III) 记忆化搜索+细节
http://www.lightoj.com/volume_showproblem.php?problem=1017 题意:给出刷子的宽和最多横扫次数,问被扫除最多的点是多少个. 思路:状态设计DP[ ...
- 软件测试(三)—— 参数化测试用例(Nextday.java)
import static org.junit.Assert.*; import java.lang.reflect.Array; import java.util.Arrays; import ja ...
- input美化问题
对于前端来说,一个比较大的问题是,当HTML提供的最原始的控件长的很丑可是又没有相应的属性去更改,碰到这个问题时我们应该怎么办?比如radio的那个单选框我觉得好丑啊,怎么办呢?一个很好的思路就是把它 ...
- CSS进阶知识
html { -ms-text-size-adjust: 100%; -webkit-text-size-adjust: 100%; text-size-adjust: 100%; } 该属性的作用是 ...
- (2.1)windows下Nutch1.7的安装
酒店评论情感分析系统(二)——Nutch安装 一.需求部分 Nutch是Java开发的所以需要下载Java JDK. 下载地址http://java.sun.com/javase/downloads/ ...
- 搭建Elasticsearch5.6.8 分布式集群
集群搭建 1.master[192.168.101.175] 配置elasticsearch.yml #集群名称 所有节点要相同 cluster.name: my-application #本节点名称 ...
- jQuery技术内幕 深入解析jQuery架构设计与实现原理
jquery的外衣 jquery是一个轻量级的JS框架 //以下截取自jquery源码片段 (function( window, undefined ) { /* 源码内容 */ })( window ...
- angular 开发之proxy
创建proxy配置文件proxy.conf.json 内容如下 { "/api/*": { "target": "https://abc.com ...