最近面试时很多面试官都问到了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. oralce的lag和lead函数

    https://www.cnblogs.com/always-online/p/5010185.html

  2. cpp 区块链模拟示例(七) 补充 Merkle树

    Merkle 树 完整的比特币数据库(也就是区块链)需要超过 140 Gb 的磁盘空间.因为比特币的去中心化特性,网络中的每个节点必须是独立,自给自足的,也就是每个节点必须存储一个区块链的完整副本.随 ...

  3. JDK8集合类源码解析 - ArrayList

    ArrayList主要要注意以下几点: 1构造方法 2添加add(E e) 3 获取 get(int index) 4 删除 remove(int index)    ,   remove(Objec ...

  4. Firebug & Chrome Console 控制台使用指南

    转自:http://visionsky.blog.51cto.com/733317/543789 Console API 当打开 firebug (也包括 Chrome 等浏览器的自带调试工具),wi ...

  5. 三连击(NOIP1998)

    题目链接:三连击 典型的打表题,但cgg今天不是教你怎么打表的,而是教你正解. 这题方法多样,比如递归求解也行,反正数据也不大. 在这里我提供另一种思路,我们枚举第一个数,即最小的一个数,然后分解它以 ...

  6. 20155312 2016-2017-2 《Java程序设计》第十周学习总结

    20155312 2016-2017-2 <Java程序设计>第十周学习总结 ## 课堂内容总结 数组 遍历数组: for(...,arr) for(i=0;i<arr.length ...

  7. 2019.01.16 bzoj3526: [Poi2014]Card(线段树)

    传送门 线段树菜题. 题意:有一些卡牌,正反各有一个数,你可以任意翻转,每次操作会将两张卡牌的位置调换,你需要在每次操作后回答以现在的卡牌顺序能否通过反转形成一个单调不降的序列. 思路: 对于一个线段 ...

  8. 牛客训练二:处女座的签到题(STL+精度+三角形求面积公式)

    题目链接:传送门 知识点: (1)三个点,三角形求面积公式 (2)精度问题: double 15-16位(参考文章) float 6-7位 long long 约20位 int 约10位 unsign ...

  9. springboot 容器启动事件

    在springboot 容器启动时,我们需要在启动过程中做一些操作,比如启动容器后,执行某些代码. spring 提供了监听器,我们可以方便的实现这些操作. 在容器启动开始时: package com ...

  10. i2c_client 几种实例化方法

    http://blog.csdn.net/lugandong/article/details/48092397