Entity Framework 4.1 之一 : 基础

从 Code First 的名字可以猜到,使用 Code-First,你需要从代码开始数据的工作,你可以直接通过代码生成相应的数据库,也可以使用已经存在的数据库。使用 Code First 的好处在于,你的实体类不需要任何 EF 的内容:不需要派生自某个特定的基类,也不需要任何讨厌的标签附加在其上。好了,对于标签来说,像我们将要看到的,是可选的。
让我们通过一个简单的实体模型开始吧:订单和订单明细,我们使用下面的类来建模。
public class Order
{
public int OrderID { get ; set ; }
public string OrderTitle { get ; set ; }
public string CustomerName { get ; set ; }
public DateTime TransactionDate { get ; set ; }

public List < OrderDetail > OrderDetails { get ; set ; }
}

public class OrderDetail
{
public int OrderDetailID { get ; set ; }
public int OrderID { get ; set ; }
public decimal Cost { get ; set ; }
public string ItemName { get ; set ; }

public Order Order { get ; set ; }
}
注意类的下述特点:
  • 没有派生自任何 EF 类
  • 没有使用 EF 标签
  • 订单 Order 包含若干的订单明细 OrderDetail,订单明细包含一个指向订单的引用。
  • 每一个属性是:
    • 简单的 CLR 类型,例如:string, int 等等
    • 实体类型,例如:订单
    • 实体的 List 集合,例如:List<OrderDetail>
需要通过一个容器将这些类映射到数据库,这里称为 Database-Context:
public class MyDomainContext : DbContext
{
public DbSet < Order > Orders { get ; set ; }
public DbSet < OrderDetail > OrderDetails { get ; set ; }

static MyDomainContext()
{
Database.SetInitializer
< MyDomainContext > (
new DropCreateDatabaseIfModelChanges < MyDomainContext > ());
}
}
这个类是 EF 相关的,它不需要与你的模型类出现在同一个程序集中。
context 必须满足下面的要求:
  • 派生自 System.Data.Entity.DbContext
  • 对于你希望使用的每一个实体集定义一个属性
  • 每一个属性的类型是 System.Data.Entity.DbSet<T>,T 就是实体的类型
  • 每一个属性都是读写属性 read/write ( get/set )
在这里,DbContext 基类通过反射来获取映射到数据库的实体。这遵循一系列的约定。
例如,对于 Order 来说,他的属性 OrderID 必须是主键,其它的约定将用来推断列名和列的类型,默认数据库中的列名是属性名,使用 string 类型来影射数据库中的 nvarchar(128), 如果属性的类型是可空的,那么,影射到数据库中的允许 NULL 等等。以后我们可以看到如果覆盖这些约定。
我们将增加一个静态的构造函数,这个静态的构造函数对于整个应用程序域来说建立一个标准,当数据库的上下文初始化的时候,检查数据库的架构是否与模型相符,如果不是的话,将删除数据库然后重新创建它。EF 将会创建一个名为 dbo.EdmMetadata 的表,然后将模型结构的 Hash 保存到其中来实现。
如果数据库不存在,EF 将会创建它,创建什么数据库呢?默认情况下,将在你的本地机器上,使用上下文对象名称,有许多方式来覆盖这个行为,最简单的方式是在配置文件中增加一个名字为上下文对象名称的数据库连接串,在我这里,叫做 MyDomainContext,还可以通过实现一个构造函数,然后调用非默认的基类构造函数来实现。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值