EF的代码优先设计

CodeFirst 用中文说是代码优先,此技术可以让我们先写代码,然后由Entity Framework根据我们的代码建立数据库

接下来用学生这个例子来演示,有学生表,课程表,和成绩表三张表

首先是Model层

学生表

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
/**/
using System.ComponentModel.DataAnnotations;//验证

namespace CodeFirstDemo.Models
{
    public class Student
    {
        [Key]
        public int Id { get; set; }
        [Required]
        [StringLength(50)]
        public string Name { get; set; }
    }
}

课程表

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
/**/
using System.ComponentModel.DataAnnotations;//验证

namespace CodeFirstDemo.Models
{
    public class Course
    {
        [Key]
        public int Id { get; set; }
        [Required]
        [StringLength(50)]
        public string Name { get; set; }
    }
}

成绩表

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
/**/
using System.ComponentModel.DataAnnotations;//验证
namespace CodeFirstDemo.Models
{
    public class Score
    {
        [Key]
        public int Id { get; set; }

        public Student Student { get; set; }

        public Course Course { get; set; }

    }
}

[Key]表示在数据库中该字段为主键,[Required]表示不为空,[StringLength]也就是长度了

这一步完成之后,我们要建立一个StudentInfoEntities的类,这个类要继承自DbContext,而DbContext类在System.Data.Entity命名空间下,需引用EntityFramework.dll类库,

如安装不了,可以去Visual Studio Gallery下载,其实,只需要引用一个叫做Entity Framework的dll类库即可

StudentInfoEntities类

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
/**/
using System.Data.Entity;

namespace CodeFirstDemo.Models
{
    public class StudentInfoEntities:DbContext
    {
        public DbSet<Course> Courses { get; set; }
        public DbSet<Score> Scores { get; set; }
        public DbSet<Student> Students { get; set; }
    }
}

接着,我们在Web.Config里配置一下数据库的连接字符串

  <connectionStrings>
    <add name="StudentInfoEntities" connectionString="Data Source=.\SQLEXPRESS; User=test;Password=test;Initial Catalog=StudentInfo;Integrated Security=True"
      providerName="System.Data.SqlClient" />
  </connectionStrings>

最后,新建一个HomeController

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
/**/
using CodeFirstDemo.Models;
namespace CodeFirstDemo.Controllers
{
    public class HomeController : Controller
    {
        private StudentInfoEntities db = new StudentInfoEntities();
        public string Index()
        {
            var data = db.Students.ToList();
            return "Database is build success!";
        }

    }
}

点击调试,触发一下,查看数据库

同时,您会发现,在Score表中,自动产生外键关系

时间: 2024-10-14 19:09:32

EF的代码优先设计的相关文章

在快速自定义的NopCommerce中使用实体框架(EF)代码优先迁移

我看到很多nopCommerce论坛的用户问他们如何使用Entity Framework(EF)代码优先迁移来自定义nopCommerce,添加新的字段和entites核心.我实际上在做nopCommerce定制项目时使用了很多EF Migrations,我必须说它在开发中有很大帮助. 今天,我将与大家分享如何在nopCommerce项目中做到这一点!我将使用nopCommerce 3.20作为例子,但你可以很容易地应用这个概念到其他的vesions! 原文链接:http://www.nopcn

C# CodeFirst(EF框架)代码优先创建数据库

namespace WebEF.Model{ public class ModelContext:DbContext //继承DBcontext 来自EF框架 { public ModelContext() : base("name=配置文件名") { //读取配置文件 /*配置文件的设置格式 <connectionStrings> <add name="配置文件名" connectionString="Data Source=(. .l

(转)EF中数据优先,模型优先和代码优先

看了很多文章也不是很明白,说的都太书面化了,大家看看这图一下子就明白了,哈哈 其实看图很简单,database first和model first都是通过 data model创建的edmx文件,只不过model first模块可以自己根据需要创建和修改实体,显得更加灵活. codefist是一个class代码文件,它可以由一些第三方的软件可视化的创建,也是非常灵活的一种方式,目前被使用也是最广泛的. 二.Entity Framework Database first(数据库优先)使用过程 2.

使用Entity Framework 4进行代码优先开发

[原文地址]Code-First Development with Entity Framework 4   .NET 4随带发布了一个改进版的Entity Framework(EF)- 一个位于System.Data.Entity命名空间的数据访问函数库. 当Entity Framework在.NET 3.5 SP1里第一次发布的时候,很多程序员给我们提供了反馈,指出他们认为在第一个版本中不足的地方.SQL团队积极听取这些意见,并且在.NET 4的版本里吸取了意见. EF4里一些重大改进包含有

EF之Code First代码优先

1.前言 通过英文可知,表示的是代码优先,一般创建EF都是先创建数据库,创建根据数据库的EF实体模型,而code - first 则是反过来!... 2.代码实战 我们这次创建的不是原来的数据库EF设计器,而是空的Code first 模型.如果说你的项目引用中没有entity framkwork,则需要去nuget程序包中安装ef框架(entity) 创建一个类,这个类就是数据的上下文,它的目录在MVC项目中的Model文件夹,base中的是你所创建的数据库名称,而你创建的表也是在model的

关于类库中EntityFramework之CodeFirst(代码优先)的操作浅析

前有ADO.NET,后有ORM模式的EntityFramework.这两种技术都实现了对数据库的访问操作.如果要说哪种技术好,就看项目架构的大小,使用者的熟练程度等等,毕竟萝卜白菜,各有所爱. 今天要记录和讨论的是项目之数据访问层中,使用EF来操作数据库,并可以自动更新数据库表的结构.闲话休提,逻辑步骤为先! 一.创建测试项目 目的:创建一个简单的带有模型层和数据访问层的控制台应用程序架构.如下图: Model:用作模型层,对应数据库中的表: DAL:数据访问层,实现对数据库的操作控制.引用Mo

文档驱动式代码设计器——代码是设计出来的!

代码是敲出来的吗?是批量生成出来的吗? No no no,代码是设计出来的! 如果说到代码生成器,大家可能会想到三层.动软代码生成器.数据库表等等.其一般的思路是,先有数据库然后根据库里的表自动生成一系列的代码,包括实体类.持久化.业务层(空函数).页面代码等,还可以生成数据库文档.这个确实很好很强大,可以免除程序员的机械式的敲代码的工作. (“主要实现在对应数据库中表的基类代码的自动生成,包括生成属性.添加.修改.删除.查询.存在性.Model类构造等基础代码片断,支持不同3种架构代码生成,使

01重构_改善既有代码的设计阅读笔记之一

<重构_改善既有代码的设计>这本书介绍了重构的原理和最佳实践方式,并给出了何时以及何地应该开始挖掘代码以求改善,每个重构都介绍了一种经过验证的代码变换手法的动机和技术. 重构,绝对是写程序过程中最重要的事之一.在写程序之前我们不可能事先了解所有的需求,设计肯定会有考虑不周的地方,而且随着项目需求的修改,也有可能原来的设计已经被改得面目全非了.更何况,我们很少有机会从头到尾完成一个项目,基本上都是接手别人的代码,即使这个项目是从头参与的,也有可能接手其他组员的代码.我们都有过这样的经验,看到别人

《重构--改善既有代码的设计》总结or读后感:重构是程序员的本能

此文写得有点晚,记得去年7月读完的这本书,只是那时没有写文章的意识,也无所谓总结了,现在稍微聊一下吧. 想起写这篇感想,还是前几天看了这么一篇文章 研究发现重构软件并不会改善代码质量 先从一个大家都有的经历说起吧. 刚开始学编程时,比如,要统计数字出现的次数,我们会这么定义变量 int i=0;//统计次数 老师看了说,代码要有可读性,见名知意; 于是,我们把它改成 int count=0; 后来才知道,原来这么一手这就是重构的第一式,重命名 (eclipse快捷键 alt+shift+R,最近