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 ...
随机推荐
- Axure学习(一)
了解Axure目前的一些评价信息以及可以学习Axure的网址.
- android windows的一些item属性
<item name="android:windowFrame">@null</item> :Dialog的windowFrame框为无 <item ...
- VSFTPD虚拟用户配置
转载:http://www.cnblogs.com/allenjin/archive/2011/12/03/2274542.html 以下操作验证OK!!!! VSFTPD虚拟用户配置 VSFTP = ...
- The Django Book第六章(Admin)随笔
要使用Django自带的管理界面,首先得激活- 激活的前提首先在你的项目的seeting目录下的INSTALL_APPS必须有以下的的包 django.contrib.admin django.con ...
- 几种开源的TCP/IP协议栈分析
1:BSD TCP/IP协议栈,BSD栈历史上是其他商业栈的起点,大多数专业TCP/IP栈(VxWorks内嵌的TCP/IP栈)是BSD栈派生的.这是因为 BSD栈在BSD许可协议下提供了这些专业栈的 ...
- 【转】VxWorks中高精度实时时钟的实现及C语言汇编混合编程
最近一个项目中需要在VxWorks下使用一个高精度实时时钟,要求精度为1ms,溢 出时间大于5小时.VxWorks提供系统时钟,该时钟在操作系统启动后开始计数,精度为1个tick,可以通过tickGe ...
- navicat下创建和执行存储过程
- Linux下安装启动多个Mysql
网上找了N多资料,没有一个可以顺利成功的,郁闷,可能是水平有限吧...!本人经过不断的研究.测试,完整实现Linux下启动两台MySQL,而且对mysql有了更深入的了解...废话不多说,走着! 步骤 ...
- LSTM长短期记忆神经网络模型简介
LSTM网络也是一种时间递归神经网络,解决RNN的长期依赖关系. RNN模型在训练时会遇到梯度消失或者爆炸的问题,训练时计算和反向传播,梯度倾向于在每一时刻递增或递减,梯度发散到无穷大或者0..... ...
- sql相同项求和
select (SELECT O2.ORG_NAME FROM OUTSOURCE_ORG O2 where o2.org_id = oo.parent_id) ...