`
baobeituping
  • 浏览: 1062926 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
社区版块
存档分类
最新评论

entity-framework (code-first)实例开发(一)

    博客分类:
  • .NET
阅读更多

The Contoso University Web Application

The application you'll be building in these tutorials is a simple university website.

Contoso_University_home_page

Users can view and update student, course, and instructor information. A few of the screens you'll create are shown below.

 

 

 

本文中我们介绍codefirst开发模式

首先创建一个MVC应用:

创建完成以后,系统会自动创建一个模板页:

<!DOCTYPE html> 
<html> 
<head> 
   
<title>@ViewBag.Title</title> 
   
<link href="@Url.Content("~/Content/Site.css")" rel="stylesheet" type="text/css" /> 
   
<script src="@Url.Content("~/Scripts/jquery-1.5.1.min.js")" type="text/javascript"></script> 
</head> 
<body> 
   
<div class="page"> 
       
<div id="header"> 
           
<div id="title"> <h1>Contoso University</h1> 
           
</div> 
 
           
<div id="logindisplay"> 
                @Html.Partial("_LogOnPartial") 
           
</div> 
           
<div id="menucontainer"> 
               
<ul id="menu"> 
                   
<li>@Html.ActionLink("Home", "Index", "Home")</li> 
                   
<li>@Html.ActionLink("About", "About", "Home")</li> 
                   
<li>@Html.ActionLink("Students", "Index", "Student")</li> 
                   
<li>@Html.ActionLink("Courses", "Index", "Course")</li> 
                   
<li>@Html.ActionLink("Instructors", "Index", "Instructor")</li> 
                   
<li>@Html.ActionLink("Departments", "Index", "Department")</li> 
               
</ul> 
           
</div> 
       
</div> 
       
<div id="main"> 
            @RenderBody() 
       
</div> 
       
<div id="footer"> 
       
</div> 
   
</div> 
</body> 
</html>

               

 

创建数据MODEL:

using System; 
using System.Collections.Generic; 
 
namespace ContosoUniversity.Models 
{ 
   
public class Student 
   
{ 
       
public int StudentID { get; set; } 
       
public string LastName { get; set; } 
       
public string FirstMidName { get; set; } 
       
public DateTime EnrollmentDate { get; set; } 
       
public virtual ICollection<Enrollment> Enrollments { get; set; } 
   
} 
}

using System; 
using System.Collections.Generic; 
 
namespace ContosoUniversity.Models 
{ 
   
public class Enrollment 
   
{ 
       
public int EnrollmentID { get; set; } 
       
public int CourseID { get; set; } 
       
public int StudentID { get; set; } 
       
public decimal? Grade { get; set; } 
       
public virtual Course Course { get; set; } 
       
public virtual Student Student { get; set; } 
   
} 
}

using System; 
using System.Collections.Generic; 
 
namespace ContosoUniversity.Models 
{ 
   
public class Course 
   
{ 
       
public int CourseID { get; set; } 
       
public string Title { get; set; } 
       
public int Credits { get; set; } 
       
public virtual ICollection<Enrollment> Enrollments { get; set; } 
   
} 
}

 

他们的关系是,一个学生可以有多个登记:

public virtual ICollection<Enrollment> Enrollments { get; set; } 
一门课程也有多个登记:

public virtual ICollection<Enrollment> Enrollments { get; set; } 
而一个登记对应一门课程和一个学生。

建立完这三个实体类以后,就要创建数据库的CONTEXT:

在entityframe work中我们使用的是System.Data.Entity.DbContext class,在你的代码中要包含这个数据实体。代码如下:

using System; 
using System.Collections.Generic; 
using System.Data.Entity; 
using ContosoUniversity.Models; 
using System.Data.Entity.ModelConfiguration.Conventions; 
 
namespace ContosoUniversity.Models 
{ 
   
public class SchoolContext : DbContext 
   
{ 
       
public DbSet<Student> Students { get; set; } 
       
public DbSet<Enrollment> Enrollments { get; set; } 
       
public DbSet<Course> Courses { get; set; } 
 
       
protected override void OnModelCreating(DbModelBuilder modelBuilder) 
       
{ 
            modelBuilder
.Conventions.Remove<PluralizingTableNameConvention>(); 
       
} 
   
} 
}

代码中为每个实体都创建了一个DbSet的属性,在entity framework中,一个entityset 关联了一个数据库表,一个entity关系了一张表的一行数据。

OnModelCreating方法,表示当模型创建以后我们要做的动作,

在代码中表示组织数据库自动创建的表名为复数。如果你不这么做,那么产生的数据库表名为:

Students,Course,Enrollments.

然后在你的工程文件的web.config中配置数据库连接字段:

<add name="SchoolContext" connectionString="Data Source=|DataDirectory|School.sdf" providerName="System.Data.SqlServerCe.4.0"/>

你不一定要创建连接字符串,如果你不创建,entityframework会自动在sqlserver express数据库中帮你创建。

注意我们配置的web.config 是工程目录下的。而不是在views目录下的。

在连接字符创中的name值,系统默认会去寻找和object context class名字相同的字符串。

初始化数据:

entity frame work能够自动创建数据库并初始化一些测试数据在你的应用中。

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 
using System.Data.Entity; 
using ContosoUniversity.Models; 
 
namespace ContosoUniversity.DAL 
{ 
   
public class SchoolInitializer : DropCreateDatabaseIfModelChanges<SchoolContext> 
   
{ 
       
protected override void Seed(SchoolContext context) 
       
{ 
           
var students = new List<Student> 
           
{ 
               
new Student { FirstMidName = "Carson",   LastName = "Alexander", EnrollmentDate = DateTime.Parse("2005-09-01") }, 
               
new Student { FirstMidName = "Meredith", LastName = "Alonso",    EnrollmentDate = DateTime.Parse("2002-09-01") }, 
               
new Student { FirstMidName = "Arturo",   LastName = "Anand",     EnrollmentDate = DateTime.Parse("2003-09-01") }, 
               
new Student { FirstMidName = "Gytis",    LastName = "Barzdukas", EnrollmentDate = DateTime.Parse("2002-09-01") }, 
               
new Student { FirstMidName = "Yan",      LastName = "Li",        EnrollmentDate = DateTime.Parse("2002-09-01") }, 
               
new Student { FirstMidName = "Peggy",    LastName = "Justice",   EnrollmentDate = DateTime.Parse("2001-09-01") }, 
               
new Student { FirstMidName = "Laura",    LastName = "Norman",    EnrollmentDate = DateTime.Parse("2003-09-01") }, 
               
new Student { FirstMidName = "Nino",     LastName = "Olivetto",  EnrollmentDate = DateTime.Parse("2005-09-01") } 
           
}; 
            students
.ForEach(s => context.Students.Add(s)); 
            context
.SaveChanges(); 
 
           
var courses = new List<Course> 
           
{ 
               
new Course { Title = "Chemistry",      Credits = 3, }, 
               
new Course { Title = "Microeconomics", Credits = 3, }, 
               
new Course { Title = "Macroeconomics", Credits = 3, }, 
               
new Course { Title = "Calculus",       Credits = 4, }, 
               
new Course { Title = "Trigonometry",   Credits = 4, }, 
               
new Course { Title = "Composition",    Credits = 3, }, 
               
new Course { Title = "Literature",     Credits = 4, } 
           
}; 
            courses
.ForEach(s => context.Courses.Add(s)); 
            context
.SaveChanges(); 
 
           
var enrollments = new List<Enrollment> 
           
{ 
               
new Enrollment { StudentID = 1, CourseID = 1, Grade = 1 }, 
               
new Enrollment { StudentID = 1, CourseID = 2, Grade = 3 }, 
               
new Enrollment { StudentID = 1, CourseID = 3, Grade = 1 }, 
               
new Enrollment { StudentID = 2, CourseID = 4, Grade = 2 }, 
               
new Enrollment { StudentID = 2, CourseID = 5, Grade = 4 }, 
               
new Enrollment { StudentID = 2, CourseID = 6, Grade = 4 }, 
               
new Enrollment { StudentID = 3, CourseID = 1            }, 
               
new Enrollment { StudentID = 4, CourseID = 1,           }, 
               
new Enrollment { StudentID = 4, CourseID = 2, Grade = 4 }, 
               
new Enrollment { StudentID = 5, CourseID = 3, Grade = 3 }, 
               
new Enrollment { StudentID = 6, CourseID = 4            }, 
               
new Enrollment { StudentID = 7, CourseID = 5, Grade = 2 }, 
           
}; 
            enrollments
.ForEach(s => context.Enrollments.Add(s)); 
            context
.SaveChanges(); 
       
} 
   
} 
}

seed方法中,代码在这个方法中用OBJECT创建一个新的实体到数据库中,对于每一个实体类型,代码都创建一个集合,添加他们到DBSET属性中。然后保存转变到数据库中。

然后在global.asax.cs中添加如下代码:

在application_start方法中添加:

Database.SetInitializer<SchoolContext>(new SchoolInitializer());

笔记,当你实际开发部署应用的时候,要将这段代码去掉。切记。因为一旦系统欲行了该段代码,系统每次检测到模型层变化。都会重新创建数据库,然后初始化原始的测试数据。

分享到:
评论

相关推荐

    学习Entity Framework 中的Code First

    Code First是Entity Framework提供的一个开发模式,它允许开发者首先定义领域模型,即业务逻辑中的对象模型,然后使用Entity Framework将这些模型映射到数据库结构。这种方式鼓励设计驱动的开发流程,强调模型的...

    Code First 使用Entity Framework编程

    Entity Framework的主要特点之一是支持多种建模方式,包括Database First、Model First和Code First。这些方式都可以用来建立实体数据模型,但它们的工作流程和实现方式不同。 Database First是一种传统的方式,先...

    EntityFramework实例

    3. **数据库第一(Code First)**:一种常见的开发模式,通过定义C#类来创建数据库结构。"EntityFrameworkDemo"可能展示了如何使用`DbSet&lt;T&gt;`属性定义实体集合,以及如何使用`[Key]`、`[Required]`等特性来指定...

    Entity FrameWork 6.0 Code First

    在本项目中,我们关注的是EF 6.0的Code First开发模式,这是一种在.NET Framework 4.8环境下构建数据库的应用方式。 Code First是EF的一个开发策略,它鼓励开发者从创建模型类开始,然后通过代码定义数据结构。这种...

    Programming Entity Framework Code First

    实体框架(Entity Framework)是微软主要的数据访问技术,其发展历程中,Code First 是对实体数据模型构建方式的一种重要补充。首先,我们需要了解 Entity Framework 的基本概念和历史发展,以便深入理解 Code First...

    EntityFramework 6+Oracle11g CodeFirst Demo

    用于演示EntityFramework6在CodeFirst模式下如何连接Oracle数据库的实例Demo 使用CRUD方式创建数据表,详细连接说明见代码注释,只需要更换连接字符串中的账户和数据库地址即可 .Net框架为4.5请注意匹配

    Entity Framework资料大全+实例

    这个“Entity Framework资料大全+实例”压缩包很可能包含了一系列关于EF的基础知识、进阶教程、实战案例和示例代码,旨在帮助开发者深入理解和熟练应用这个强大的工具。 1. **基本概念**:Entity Framework的核心...

    Entity Framework Code First Usage

    在实际项目中,结合`Oreilly.Programming.Entity.Framework.Code.First.Nov.2011.epub`和`Oreilly.Programming.Entity.Framework.Code.First.Nov.2011.pdf`这两本书籍,你可以深入学习和理解Entity Framework Code ...

    Programming Entity Framework DbContext

    Code First是Entity Framework的一种开发模式,它允许开发者从编写数据模型类开始,然后通过框架的能力来生成数据库。 DbContext类是Entity Framework中的核心类,它代表了一个会话,这个会话负责与数据库交互,...

    Entity_Framework-Code_First

    Entity Framework (EF) 是...总之,Entity Framework Code First为.NET开发者提供了一种高效、灵活的数据库开发方式,简化了数据库操作,提高了开发效率。通过深入理解和熟练运用,可以在实际项目中发挥出强大的作用。

    ASP.NET MVC Application Using Entity Framework Code First

    ASP.NET MVC 应用程序利用 Entity Framework Code First 是一种现代Web开发的技术组合,它结合了ASP.NET MVC框架、Entity Framework(EF)数据访问库以及Code First开发策略。这个技术栈为构建高效、可扩展的数据库...

    SQLite和EntityFramework6配合使用的实例

    在SQLite和EF6的结合使用中,我们需要安装相应的NuGet包,如`System.Data.SQLite`和`EntityFramework`。安装完成后,我们可以在EF6的`DbContext`派生类中定义数据实体,并配置SQLite数据库的连接字符串。例如: ```...

    用于oracle的Entityframework实例

    Entity Framework (EF) 是微软开发的一个对象关系映射(ORM)框架,它允许开发者使用.NET 面向对象编程来操作数据库,而无需编写大量的SQL 代码。在Oracle数据库环境中,EF同样可以工作,但需要特定的Oracle适配器来...

    EF Code First创建数据库代码实例

    在提供的压缩包文件中,`EF4FeatureCTP4.exe`可能是早期版本的EF工具或示例,而`EF.CodeFirst.Walkthrough`可能是一个包含Code First创建数据库的逐步指南或者代码示例。通过查看这些资源,你可以更深入地理解Code ...

Global site tag (gtag.js) - Google Analytics