Ef-Code-First 使用实体类映射出数据库
最近面试时很多面试官都问到了EF框架 好记性不如烂笔头
赶紧记下来
code-first是EF框架中的一种,是使用实体类来进行数据库表的映射,所以实体类中的字段要规范(我认为) 比如:

如果有外键的话 一定要搞清楚一对多、多对一和多对多的关系
比如一个用户对应一个用户详细信息可以写成这样:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
namespace QQManager.Models
{
public class User
{
public Guid Id { get; set; }
public string Name { get; set; }
public virtual UserInfo UserInfo { get; set; }
}
}
用户详细信息表:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
namespace QQManager.Models
{
public class User
{
public Guid Id { get; set; }
public string Name { get; set; }
public virtual UserInfo UserInfo { get; set; }
}
}
如果是一对多要搞清楚他们之间的关系(谁包含谁),比如一个订单中包含多个商品
订单表:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
namespace QQManager.Models
{
public class Orders
{
public Guid Id { get; set; }
public virtual List<Gooder> Gooder { get; set; }
}
}
商品表:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
namespace QQManager.Models
{
public class Gooder
{
public Guid Id { get; set; }
//商品名称
public int Name { get; set; }
//商品价格
public int Price { get; set; }
public virtual Orders Orders { get; set; }
}
}
数据上下文:
using System;
using System.Collections.Generic;
// DbContext
using System.Data.Entity;
namespace QQManager.Models
{
/// <summary>
/// 数据库上下文
/// </summary>
public class QQContext:DbContext
{
public QQContext() : base("name=qq")//web.config中连接字符串的名称
{
// 当 模型发生变化时 重新创建数据库。
Database.SetInitializer(new DropCreateDatabaseIfModelChanges<QQContext>());
}
//数据表,只要是模型类就要写进来
public virtual DbSet<Order> Orders { get; set; }
}
}
对于这种外键关系的字段,使用virtual关键字修饰用来懒加载,我在这里是只修饰了外键,其他字段也可以修饰,不碍事
具体的关于操作数据库的语法转载:https://blog.csdn.net/u013924731/article/details/53331610
这样在mvc架构中就可以使用code-first了,主要是其他架构我没使用过.....
顺便一提的是这样写唯一的麻烦就是在使用时每次都要实例化上下文,解决(不使用也不碍事):
using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Remoting.Messaging;
using System.Web;
using System.Web.Mvc;
using QQManager.Models;
namespace QQManager.Controllers
{
public class BaseController : Controller
{
protected QQContext db
{
get
{
// 从当前线程中获取上下文数据。
QQContext _db = CallContext.GetData("qq") as QQContext;
if (_db == null)
{
_db = new QQContext();
_db.Database.CreateIfNotExists();
}
// 将上下文数据保存到当前线程中。
CallContext.SetData("qq",_db);
return _db;
}
}
}
}
这样只要继承此类就可以直接使用上下文,名称为自定义,这里是db。
Ef-Code-First 使用实体类映射出数据库的更多相关文章
- EF Code First:实体映射,数据迁移,重构(1)
一.前言 经过EF的<第一篇>,我们已经把数据访问层基本搭建起来了,但并没有涉及实体关系.实体关系对于一个数据库系统来说至关重要,而且EF的各个实体之间的联系,实体之间的协作,联合查询等也 ...
- EF Code First:实体映射,数据迁移,重构
经过EF的<第一篇>,我们已经把数据访问层基本搭建起来了,但并没有涉及实体关系.实体关系对于一个数据库系统来说至关重要,而且EF的各个实体之间的联系,实体之间的协作,联合查询等也都依赖于这 ...
- EF Code First:实体映射
二.实体映射 实体与数据库的映射可以通过DataAnnotation与FluentAPI两种方式来进行映射: (一) DataAnnotation DataAnnotation 特性由.NET 3.5 ...
- Entity Framework(EF) Code First将实体中的string属性映射成text类型的几种方式
1.通过ColumnType属性设置 [Column(TypeName="text")] public string Text { get; set; } 在进行以上属性设置时,请 ...
- 【繁星Code】如何在EF将实体注释写入数据库中
最近在项目中需要把各个字段的释义写到数据库中,该项目已经上线很长时间了,数据库中的字段没有上千也有上百个,要是一个项目一个项目打开然后再去找对应字段查看什么意思,估计要到明年过年了.由于项目中使用En ...
- ASP.NET Core 中使用EF Core 将实体映射到数据库表的方法(SQL Server)
前段时间听过一个关于使用ASP.NET Core建立项目的视频.其中使用EF Core映射到数据库的部分是按部就班地学习.今天自己建立项目时,有些步骤已经有一些遗忘.所以写下这篇文章,顺便理清思路. ...
- EF Code First连接现有数据库
作为一个初入学习.net MVC4 的新手,想写一写今天碰到的问题,做一个总结. 首先我想利用EF Code First来连接我现有数据库,而不是通过EF Code First来自动生成数据库和表. ...
- 步步学LINQ to SQL:将类映射到数据库表【转】
[IT168 专稿]该系列教程描述了如何采用手动的方式映射你的对象类到数据表(而不是使用象SqlMetal这样的自动化工具)以便能够支持数据表之间的M:M关系和使用实体类的数据绑定.即使你选择使用了自 ...
- 【极力分享】[C#/.NET]Entity Framework(EF) Code First 多对多关系的实体增,删,改,查操作全程详细示例【转载自https://segmentfault.com/a/1190000004152660】
[C#/.NET]Entity Framework(EF) Code First 多对多关系的实体增,删,改,查操作全程详细示例 本文我们来学习一下在Entity Framework中使用Cont ...
随机推荐
- activiti如何获取当前节点以及下一步路径或节点(转)
ACTIVITI相对于JBPM来说,比较年轻,用的人少,中文方面的资料更少,我根据网上到处找得资料以及看官方文档总结出来了代码,非常不容易啊.废话不多说,直接上代码吧: 首先是根据流程ID获取当前任务 ...
- JS closure
闭包的概念 闭包,不同于一般的函数,它允许一个函数在立即词法作用域外调用时,仍可访问非本地变量. --维基百科 闭包就是能够读取其他函数内部变量的函数. --阮一峰 由于在Javascript语言中, ...
- ios蓝牙自定义快捷键
http://www.paopaoche.net/app/12072.html Beekeyboard
- 核心一:IoC
IoC 1.中文名称:控制反转 2.英文名称:(Inversion of Control) 3.IoC是什么? 3.1 IoC 完成的事情原先由程序员主动通过new 实例化对象事情,转交给Spring ...
- Bootstrap之Bootstrap组件
一 文本居中 col-xx-offset-xx:水平居中 center-block:使用于不涉及float标签的水平居中,也不涉及列的居中,让哪里居中就写到哪里,本质是:margin:0 auto. ...
- 2019.02.09 bzoj2839: 集合计数(容斥原理)
传送门 题意简述:对于一个有N个元素的集合在其2^N个子集中取出若干集合(至少一个),使得它们的交集的元素个数为K,求取法的方案数. 思路:考虑枚举相交的是哪kkk个,有CnkC_n^kCnk种方案 ...
- Query - noConflict() 方法
ps:菜鸟教程 如何在页面上同时使用 jQuery 和其他框架? noConflict() 方法会释放对 $ 标识符的控制,这样其他脚本就可以使用它了. 当然,您仍然可以通过全名替代简写的方式来使用 ...
- Codeforces Round #541 (Div. 2) D 并查集 + 拓扑排序
https://codeforces.com/contest/1131/problem/D 题意 给你一个n*m二维偏序表,代表x[i]和y[j]的大小关系,根据表构造大小分别为n,m的x[],y[] ...
- ACM-ICPC 2018 徐州赛区网络预赛 C Cacti Lottery(暴力+期望)
链接https://nanti.jisuanke.com/t/31455 思路 首先先枚举把剩下的数填入星号的情况(其实就是枚举星号的排列),这是对方所能知道的所有信息,然后对方将取八种决策中最优的情 ...
- oracle在exp导出时报错PLS-00201: identifier 'EXFSYS.DBMS_EXPFIL_DEPASEXP' must be declared
报错如下信息: EXP-00008: ORACLE error 6550 encounteredORA-06550: line 1, column 14:PLS-00201: identifier ' ...