最近面试时很多面试官都问到了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 使用实体类映射出数据库的更多相关文章

  1. EF Code First:实体映射,数据迁移,重构(1)

    一.前言 经过EF的<第一篇>,我们已经把数据访问层基本搭建起来了,但并没有涉及实体关系.实体关系对于一个数据库系统来说至关重要,而且EF的各个实体之间的联系,实体之间的协作,联合查询等也 ...

  2. EF Code First:实体映射,数据迁移,重构

    经过EF的<第一篇>,我们已经把数据访问层基本搭建起来了,但并没有涉及实体关系.实体关系对于一个数据库系统来说至关重要,而且EF的各个实体之间的联系,实体之间的协作,联合查询等也都依赖于这 ...

  3. EF Code First:实体映射

    二.实体映射 实体与数据库的映射可以通过DataAnnotation与FluentAPI两种方式来进行映射: (一) DataAnnotation DataAnnotation 特性由.NET 3.5 ...

  4. Entity Framework(EF) Code First将实体中的string属性映射成text类型的几种方式

    1.通过ColumnType属性设置 [Column(TypeName="text")] public string Text { get; set; } 在进行以上属性设置时,请 ...

  5. 【繁星Code】如何在EF将实体注释写入数据库中

    最近在项目中需要把各个字段的释义写到数据库中,该项目已经上线很长时间了,数据库中的字段没有上千也有上百个,要是一个项目一个项目打开然后再去找对应字段查看什么意思,估计要到明年过年了.由于项目中使用En ...

  6. ASP.NET Core 中使用EF Core 将实体映射到数据库表的方法(SQL Server)

    前段时间听过一个关于使用ASP.NET Core建立项目的视频.其中使用EF Core映射到数据库的部分是按部就班地学习.今天自己建立项目时,有些步骤已经有一些遗忘.所以写下这篇文章,顺便理清思路. ...

  7. EF Code First连接现有数据库

    作为一个初入学习.net MVC4 的新手,想写一写今天碰到的问题,做一个总结. 首先我想利用EF Code First来连接我现有数据库,而不是通过EF Code First来自动生成数据库和表. ...

  8. 步步学LINQ to SQL:将类映射到数据库表【转】

    [IT168 专稿]该系列教程描述了如何采用手动的方式映射你的对象类到数据表(而不是使用象SqlMetal这样的自动化工具)以便能够支持数据表之间的M:M关系和使用实体类的数据绑定.即使你选择使用了自 ...

  9. 【极力分享】[C#/.NET]Entity Framework(EF) Code First 多对多关系的实体增,删,改,查操作全程详细示例【转载自https://segmentfault.com/a/1190000004152660】

      [C#/.NET]Entity Framework(EF) Code First 多对多关系的实体增,删,改,查操作全程详细示例 本文我们来学习一下在Entity Framework中使用Cont ...

随机推荐

  1. DataTable表连接

    public static System.Data.DataTable TableJoin(System.Data.DataTable dt, System.Data.DataTable dtDeta ...

  2. Two Sum LT1

    Given an array of integers, return indices of the two numbers such that they add up to a specific ta ...

  3. oracle 62进制序列号

    create or replace function GetSerial62(v_lpad number default 0) return varchar2 IS v_tmp number(38,0 ...

  4. 【Redis】Redis-benchmark测试Redis性能

    Redis-benchmark是官方自带的Redis性能测试工具,可以有效的测试Redis服务的性能. 使用说明如下: Usage: redis-benchmark [-h <host>] ...

  5. android-如何获得当前正在运行的activity的相关信息

    http://blog.csdn.net/centralperk/article/details/7269326 ActivityManager manager = (ActivityManager) ...

  6. 异常处理(异常解析器) 和 对于Properties类型的属性的配置

    在程序运行中,有可能因为用户的不当操作,发生异常.. 在springmvc中可以根据不同的异常配置不同的处理方式 1.例如出现 这个类型异常 org.springframework.web.multi ...

  7. django之content_type

    什么是content type:django内置的一个组件,这个组件帮忙做连表的操作.(混搭连表) 适用场景:适用于一张表与多张表同时做关联的时候.直接导入就可以使用了. 关联数据库说有的表:让我们可 ...

  8. Oracle导入的常见语句

    登录sql > sqlplus / as sysdba 创建表空间sql > create tablespace TABLESPACE datafile 'e:\tables1.dbf' ...

  9. 消除flex-wrap之后每个item上下的距离

    设置flex-wrap后,每个item上下都会有距离.更改父元素的高度,就可以删除这些距离. 更改后:

  10. TCP/IP协议(1):各层协议帧格式

    一. 1.OSI与TCP/IP对应: TCP/IP各层功能: 链路层:包括操作系统的设备驱动程序和计算机的网卡,提供底层传输服务.   网络层:为数据选择路由,在众多计算机和网络设备组成的网络中选择一 ...