2)安装CTP5后添加CodeFirst的引用:.net组件名称为EntityFramework 和 System.Data.Entity
3)编写实体类 (置于Models文件夹)
public class Department
{
public int DepartmentID { get; set; }
[MinLength(2)]
[MaxLength(20)]//在数据库中生成nvarchar(20)的字段
public string DepartName { get; set; }
public virtual ICollection<Employee> Employees { get; set; } //使用virtual字段延迟加载
}
public class Employee
{
public int EmployeeID { get; set; }
public int Age { get; set; }
public int DepartmentID { get; set; }
public virtual Department Department { get; set; } //使用virtual字段延迟加载
}
CTP5版支持的注释的完整列表如下:
- KeyAttribute
- StringLengthAttribute
- MaxLengthAttribute
- ConcurrencyCheckAttribute
- RequiredAttribute
- TimestampAttribute
- ComplexTypeAttribute
- ColumnAttribute 置于一个属性上,指定其字段名,序数和数据类型
- TableAttribute 置于一个类上,指定其数据表名和定义
- InversePropertyAttribute 置于一个导航属性上,指定代表关系另一端的属性
- ForeignKeyAttribute 置于一个导航属性上,指定代表关系外键的属性
- DatabaseGeneratedAttribute 置于一个属性上,指定数据库该如何为该属性生成值(Identity, Computed 或者 None)
- NotMappedAttribute 置于一个属性或类上,将其排除在数据库外
其他特性:
[Display(Name = "用户名")]
常用的验证属性:
[Required]
[DataType(DataType.EmailAddress)]
[DataType(DataType.Password)]
[Compare("Password", ErrorMessage = "密码和确认密码不匹配。")]
4)编写Context (放置于Models文件夹)
public class RenContext : DbContext
{
public DbSet<Employee> Employees { get; set; }
public DbSet<Department> Departments { get; set; }
//不写这个 默认的数据库名称就是RenContext
public RenContext() : base("name=dbStr") { }
//这个方法可以没有,重写的这个方法里,我们可以移除一些契约,还可以配置数据库映射关系
protected override void OnModelCreating(ModelBuilder 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> 模式作为属性的外观。
*/
}
}
5)数据库设置
● 新增添数据库
[没有连接串的情况] 将会在本地的 .\SQLExpress 中创建一个默认的数据库。
[显式指定连接串] 在 web.config 中增加一个连接串的配置来显式指定,连接串的名字需要匹配 DbContext 类的名字,例:
<connectionStrings>
<add name="RenContext" connectionString="Data Source=ACER-PC\HHSQLSERVER;Initial Catalog=REN;Integrated Security=True"
providerName="System.Data.SqlClient" />
</connectionStrings>
● 修改数据库
8)常用网址
用EF Code First和ASP.Net MVC3进行类级别模型验证
一步一步学习ASP.NET MVC3 &EF Code First CTP 5&DI
Repository模式
Code First中的约定
CTP5版: 流畅 API 例子
实体框架代码优先CTP5发布
EF特性CTP5版: 代码优先示范
跟我学MVC系列(Repository模式、LINQ、EF、IOC框架Castle、JQuery、AJAX)
Entity Framework 4.1 Code First学习之路(一)
MVC3教程之实体模型和EF CodeFirst
CTP5自动重建数据库
Entity Framework学习高级篇1—改善EF代码的方法
Entity Framework 4 代码优先开发:http://www.c_ongci.com/item/codefirst (去掉下划线)