当前位置:编程学习 > asp >>

Entity Framework 4.1 Code First学习之路(一)

前言

公司最近的项目决定使用EF。作为EF的完全新手,写一些学习中的经历和解决的办法,希望老鸟们能不吝赐教。

sample程序使用EF 4.1RC+Spring.Net 1.3.1+ASP.NET MVC3。在CodePlex开源

http://efsample.codeplex.com/

由于使用了其他的开源框架,还是声明一下license为Apache 2.0。实际上只要不违反各个框架的license,本系列代码请随意使用。

需求

先谈一谈项目对ORM的需求

基本需求

  • 增删改
  • 一对多
  • 多对多
  • 可以映射到现有数据库上(有一些命名方面的问题)
  • 可以让任意类映射到数据库上(项目允许客户二次开发。最简单的情况下,希望用户只写出类和表结构就可以映射了。这是为什么选择了Code First的主要原因)
  • per-request的DbContext生命周期管理。
  • 事务

扩展需求

  • 一对一
  • 领域类继承
  • 领域类的依赖注入

这个系列将尝试覆盖以上的大多数问题。

 

场景

假设我们准备做个游戏,有如下的表结构

image 

实践(一)

作为系列的第一章,我们的目标是:从数据库中取出数据来。像这样

image

image

让我们开始第一步:创建领域模型

按照官方blog的aspx" target=_blank>walk through,很容易的写出如下代码。

    public class Race : IEntity
    {
        public int Id { get; set; }
        public string Name { get; set; }
    }
    public class Hero : IEntity
    {
        public int Id { get; set; }
        public string Name { get; set; }
        public bool IsSuperHero { get; set; }
        public virtual Race Race { get; set; }
    }

 

注意Hero类中的Race属性被定义成了virtual,这是为了延迟加载。但是不同于NH的是,不写virtual不会报错,而是在使用时报出空引用异常。

这里插一句,在领域模型中必须向ORM妥协是让我非常不爽的地方,从使用NH的时候我就非常不喜欢virtual这一点。NH lead Ayende Rahien 推荐了virtuosity,可以尝试一下。

下一步,我们要创建自己的DbContext了

按照官方blog的walk through上的写法,大概会写成

    public class EfDbContext : DbContext
    {
        public DbSet<Hero> Heros { get; set; }
        public DbSet<Race> Races { get;&nbs
补充:Web开发 , ASP.Net ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,