EF CodeFirst学习使用

EFCodeFirst工具下载:

 CTP5(实体框架特性): CodeFirst 通过实体代码自动创建数据库  下载地址

 CodeFirst辅助工具: EF Power Tool   根据数据库生成MODEL类,生成EF Generated View提高EF性能 下载地址

 

分三大步:一,创建实体类,二映射实体类到数据库,三,访问数据库

以文章为例 :需要建立文章表和文章类型表

1.1创建实体类
using System.ComponentModel.DataAnnotations;
 //1.1定义实体类
    public class ArticleModel
    {
        [Key]
        public int ID { get; set; }
        public string Title { get; set; }
        public string Content { get; set; }
        public int CategoryID { get; set; }
        public virtual ArticleCategoryModel Category { get; set; }//定义外键
    }
    //1.1定义实体类
    public class ArticleCategoryModel
    {
        [Key]
        public int ID { get; set; }
        public string Name { get; set; }
        public string Description { get; set; }
    }
2.1将实体类映射到数据库
   //2.1数据库的持久化映射
    public class kuiyuDB : DbContext //来自System.Data.Entity
    {
        public DbSet<ArticleModel> Article { get; set; }
        public DbSet<ArticleCategoryModel> ArticleCategory { get; set; }
    }
2.2.1初始化数据库数据
 public class kuiyuDBInitializer : DropCreateDatabaseIfModelChanges<kuiyuDB>
    {
        protected override void Seed(kuiyuDB context)
        {
            base.Seed(context);

            var category = new List<ArticleCategoryModel> { 
              new ArticleCategoryModel{Name="类型1"},
              new ArticleCategoryModel{Name="类型2"},
              new ArticleCategoryModel{Name="类型3"}
            };
            category.ForEach(c => context.ArticleCategory.Add(c));
            context.SaveChanges();
            var article = new List<ArticleModel> {
              new ArticleModel{Title="文章1",Content="内容1",CategoryID=1},
              new ArticleModel{Title="文章2",Content="内容2",CategoryID=1},
              new ArticleModel{Title="文章3",Content="内容3",CategoryID=1}
            };
            //遍历每项并入库
            article.ForEach(a => context.Article.Add(a));
            context.SaveChanges();
        }
    }
2.2.2初始化数据库数据
//在 Global.asax 下的Application_Start()加上如下代码

//当Code First与数据库结构不一致时,删除原数据库,重新生成数据库结构 
             Database.SetInitializer<kuiyuDB>(new DropCreateDatabaseIfModelChanges<kuiyuDB>());
             Database.SetInitializer<kuiyuDB>(new KuiyuDBInitializer());
3.1调用数据
 kuiyuDB db = new kuiyuDB();
 public ActionResult Index()
        {
          //查询所有文章
            var t = db.Article;
            return View(t);
        }
3.2显示数据
@model IEnumerable<MvcApplication1.Models.ArticleModel>

<ul>
@foreach (var item in Model)
{
    var title = item.Title;
    <li>@title</li>
}
</ul>
3.3数据库连接字符串
2.5创建sql连接字符串,名称与映射数库类的名字相同

<connectionStrings>
    <add name="kuiyuDB" connectionString="Data Source=pc\SQLEXPRESS; Initial Catalog=aaa; User ID=sa; Password=11" providerName="System.Data.SqlClient"/>
</connectionStrings>

 创建好数据库后,在任意一个控制器中调用,就可以生成数据库了

Domain.ShopDB db = new Domain.ShopDB();
            db.Database.CreateIfNotExists();

二,数据迁移

开发时,更新了实体类后,是不能运行的,需要用到数据迁移功能

1.更新EF到4.3以上版本,可以使用数据迁移功能

2.选择  工具--Library Package Manager--Package Manager Console

在PM>提示符下输入 Enable-Migrations

 

三EF使用存储过程,SQL命令

三.EF如何使用sql,命令,存储过程
kuiyuDB db = new kuiyuDB();
List<SqlParameter> param=new List<SqlParameter>();
            param.Add(new SqlParameter("@sql参数", 值1));

db.Article.SqlQuery("exec 存储过程名称 @参数1,@参数2...",param.ToArray());
 
 List<SqlParameter> param = new List<SqlParameter>();
            param.Add(new SqlParameter("@ID", 1));
            var result=(from p in db.Article.SqlQuery("exec 存储过程名 @ID",param.ToArray()) select p).ToList();
            //有返回值的SQL
            Type t=typeof(int);
            var result1 = db.Database.SqlQuery(t, "exec 存储过程名 @参数", param.ToArray()).Cast<int>().First();

            //增删改
            db.Database.ExecuteSqlCommand("sql语句或exec 存储过程名", 参数数组);

 

posted @ 2012-05-03 16:39  奎宇工作室  阅读(1023)  评论(0编辑  收藏  举报