Entity Framework Code First易忘点

EF入门基础知识了解

1、DbContext(上下文类)
DbContext是实体类与数据库的桥梁,主要负责与数据交互。
Entity Framework Code First易忘点_第1张图片
DbContext主要负责以下活动:

EntitySet::DbContext包含了所有映射到表的entities

Querying:将Linq-To-Entities转译为Sql并发送到数据库

Change Tracking:从数据库获取entities后保留并跟踪实体数据变化

Persisting Data:根据entity状态执行Insert、update、delete命令

Caching:DbContext的默认第一级缓存,在上下文中的生命周期中存储entity

Manage Relationship:DbContext在DbFirst模式中使用CSDL、MSL、SSDL管理对象关系,Code first中使用fluent api 管理关系

Object Materialization:DbContext将物理表转成entity实例对象

Entity Framework Code First属性映射约定
  Entity Framework Code First与数据表之间的映射方式有两种实现:Data Annotation和Fluent API。本文中采用创建Product类为例来说明tity Framework Code First属性映射约定的具体方式。

  1. 表名及所有者
      在默认约定的情况下,Entity Framework Code First创建的表名是根据类名的英语复数形式,创建的表所有者为dbo,可以通过重写约定来指定表名及表的所有者。

1.1 Data Annotation方式
  在使用Data Annotation方式进行Entity Framework Code First与数据库映射之前,需要先添加命名空间引用。

using System.ComponentModel.DataAnnotations.Schema;

为类配置对应表名:

[Table("Product")]
public class Product

为类配置对应表名并指定表的所有者:

[Table("Product", Schema = "dbo")]
public class Product
1.2 Fluent API方式

Fluent API实现配置Entity Framework Code First与数据库映射关系主要是通过继承DbContext并重写其中的OnModelCreating方法来进行的。在本文中新建类文件PortalContext.cs继承DbContext。

在继承DbContext之前,添加命名空间引用。

using System.Data.Entity;
  重写OnModelCreating方法,配置类对应于数据库中的表名:

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
    modelBuilder.Entity().ToTable("Product");
}

重写OnModelCreating方法,配置类对应于数据库中的表名,并指定表的所有者:

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
    modelBuilder.Entity().ToTable("Product", "dbo");
}
 

到此处PortalContext.cs的完整代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

using System.Data.Entity;

using Portal.Entities;

namespace Portal
{
    public class PortalContext : DbContext
    {
        static PortalContext()
        {
            Database.SetInitializer(new DropCreateDatabaseIfModelChanges());
        }

        public PortalContext()
            : base("name=PortalContext")
        {
        }

        public DbSet Products { get; set; }

        protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
            modelBuilder.Entity().ToTable("Product", "dbo");
        }
    }
}
  1. 字段名、长度、数据类型及是否可空
      在默认约定的情况下,Entity Framework Code First创建的列名与类的属性名相同,可以根据需要进行重新指定类属性与列名之间的映射关系。

2.1 Data Annotation方式

[Column("ProductID")]
public int ProductID { get; set; }

[MaxLength(100)]
[Required, Column("ProductName")]
public string ProductName { get; set; }

在使用Required特性(Attribute)设置字段不允许为空时,需要添加命名空间引用:

using System.Com

你可能感兴趣的:(C#基础,Entity,Framework,EF,Code,First)