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 存储过程名", 参数数组);