基于EF4.1 code first 简单的CRUD  园子中已经有很多了 ~~ 真不想再写这个了 可是为了做一个完整的小demo 从开始 到后面的一些简单重构 还是决定认真把这个写出来

争取写些别人没写到的东西~~ 好了 开始~~

这次要做的是个学校管理的demo(通俗些)

 先建一个MVC3的应用程序  因为我们是code first 所以 开始创建实体类

一.创建Model

EF直接的一對多多對多多對一的關係----也即是鏈錶查詢

学生和学生成绩登记表是一对多的关系  一个学生可以有多次登记 (因为有多个课程)  一个课程也可以有多个登记   可以看出 其实就是 学生和课程 存在一个多对多的关系

为什么这么建立模型呢?这节主要不是讨论关系 关系这个会放到  第三节来讨论~~

现在开始创建学生的实体类

EF直接的一對多多對多多對一的關係----也即是鏈錶查詢
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; }
}
}
EF直接的一對多多對多多對一的關係----也即是鏈錶查詢

在这里面 这个StudentID将被默认的设为主键  EF将会默认的给名字为ID的或者带ID的设置为主键

Enrollments是一个导航属性  将做为外键    导航属性定义为virtual 以便于实现延迟加载 

  接下来 创建登记录入表(关系表)的实体类 

EF直接的一對多多對多多對一的關係----也即是鏈錶查詢
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; }
}
}
EF直接的一對多多對多多對一的關係----也即是鏈錶查詢

这里面 我们的成绩是可空类型     学生实体有多个 Enrollment 而Enrollment有一个学生实体的导航属性 这里面 我们既有学生ID 又有学生实体属性 我们会担心 会不会生成两个呢StudentID?不用担心 EF很聪明 在关系表里 只有一个studentID

接下来就是创建课程实体了

EF直接的一對多多對多多對一的關係----也即是鏈錶查詢
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; }
}
}
EF直接的一對多多對多多對一的關係----也即是鏈錶查詢

OK了 实体创建好了 接下来 我们要创建一个 数据库上下文

二.Creating the Database Context

这个类主要是把上面创建的实体类包含再里面  指定哪些实体类包含在我们的数据模型中 还有 这个类可以指定我们的映射关系 还可以指定一些生成的约束关系总之 很有用的

这里面 我们先创建一个DAL的文件夹 然后在下面新建一个类 叫做SchoolContext  并且继承DbContext

EF直接的一對多多對多多對一的關係----也即是鏈錶查詢
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Data;
using System.Data.Entity;
using ContosoUniversity.Models;
using System.Data.Entity.ModelConfiguration.Conventions;
using System.Data.Entity.Infrastructure;



namespace ContosoUniversity.DAL
{
public class SchoolContext:DbContext
{
private readonly static string CONNECTION_STRING = "name=WlfSys_EFCF_ConnString";


public DbSet<Student> Students { get; set; }
public DbSet<Enrollment> Enrollments { get; set; }
public DbSet<Course> Courses { get; set; }

public SchoolContext()
: base(CONNECTION_STRING)//不写这个 默认的就是SchoolContext
{

}

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();//移除复数表名的契约

modelBuilder.Conventions.Remove<IncludeMetadataConvention>();//防止黑幕交易 要不然每次都要访问 EdmMetadata这个表




/*

可以删除的公约有:
Namespace:System.Data.Entity.ModelConfiguration.Conventions.Edm
• AssociationInverseDiscoveryConvention
寻找导航上互相引用的类的属性,并将它们配置为逆属性的相同的关系。
• ComplexTypeDiscoveryConvention
寻找有没有主键的类型,并将它们配置为复杂类型。
• DeclaredPropertyOrderingConvention
确保每个实体的主要关键属性优先于其他属性。
• ForeignKeyAssociationMultiplicityConvention
配置是必需的还是可选的关系基于为空性外键属性,如果包含在类定义中。
• IdKeyDiscoveryConvention
查找名为 Id 或 <TypeName> Id 的属性,并将他们配置作为主键。
• NavigationPropertyNameForeignKeyDiscoveryConvention
使用外键关系,使用 <NavigationProperty> <PrimaryKeyProperty> 模式作为属性的外观。
• OneToManyCascadeDeleteConvention
交换机上层叠删除,所需的关系。
• OneToOneConstraintIntroductionConvention
将配置为一个: 一个关系的外键的主键。
• PluralizingEntitySetNameConvention
配置为多元化的类型名称的实体数据模型中的实体集的名称。
• PrimaryKeyNameForeignKeyDiscoveryConvention
使用外键关系,使用 <PrimaryKeyProperty> 模式作为属性的外观。
• PropertyMaxLengthConvention
配置所有的字符串和字节 [] 属性,默认情况下具有最大长度。
• StoreGeneratedIdentityKeyConvention
配置默认情况下将标识所有整数的主键。
• TypeNameForeignKeyDiscoveryConvention
使用外键关系,使用 <PrincipalTypeName> <PrimaryKeyProperty> 模式作为属性的外观。


*/

}

}
}
EF直接的一對多多對多多對一的關係----也即是鏈錶查詢

相关文章:

  • 2021-06-23
  • 2021-08-23
  • 2021-12-02
  • 2022-12-23
  • 2022-12-23
  • 2021-10-02
猜你喜欢
  • 2021-07-07
  • 2022-01-14
  • 2022-12-23
  • 2021-12-03
  • 2021-07-28
  • 2022-12-23
  • 2022-12-23
相关资源
相似解决方案