.Net EntityFramwork6.0 EF框架开发入门
一、环境
开发环境:Sqlserver2008 R2、Visual Studio2012
二、准备工作
1、新建MVC空项目
2、通过NuGet获取 EntityFramework 包
操作截图:
三、代码实现
1.建立实体类
[Table("User")] public class User { [Display(Name="id")] public int Id {get;set;} [Display(Name="UserName")] [Required(ErrorMessage="用户名必填")] public string UserName { get; set; } [Display(Name="Password")] public string Password { get; set; } }
2.构建数据库访问类
a)、继承DbContext
b)、创建数据库连接字符串,字符串名称与a)步骤类名称一致,也可不一致(需指定数据库访问串)
public class DemoConnectionContext : DbContext { public DbSet<User> dbuser { get { return Set<User>(); } } public DemoConnectionContext() : base("name=DemoConnectionContext") //指定数据库访问串 { } static DemoConnectionContext() { Database.SetInitializer<DemoConnectionContext>(new DropCreateDatabaseIfModelChanges<DemoConnectionContext>()); } }
3.数据库操作
//声明数据库操作类
DemoConnectionContext db = new DemoConnectionContext();
a)、增加数据
User user = new Models.User{UserName = "jay", Password = "123"}; db.dbuser.Add(user); db.SaveChanges();
b)、查询数据
//指定ID查询 var userObj=db.dbuser.Find(1); //写法一 var userObj = db.dbuser.Where(u => u.Id == 1).FirstOrDefault(); //写法二 //写法三 var userObj = (from u in db.dbuser where u.Id == 1 select u).ToList();
c)、更新数据
//更新表 var userObj = (from u in db.dbuser where u.UserName == "jay" select u).ToList(); userObj[0].Password = "1234"; db.dbuser.Attach(userObj[0]); //更新指定列 var setEntry = ((IObjectContextAdapter)db).ObjectContext.ObjectStateManager.GetObjectStateEntry(userObj[0]); setEntry.SetModifiedProperty("Password"); db.SaveChanges();
d)、删除数据
//删除数据 指定ID即可 User userObj = new User { Id = 1 }; db.dbuser.Attach(userObj);//附加对象 db.dbuser.Remove(userObj);//删除对象 db.SaveChanges();
e)、事物操作 多表操作,操作放在 TransactionScope
try { //事物 多表操作,操作放在 TransactionScope using (var trac = new TransactionScope()) { User user = new User { UserName = "jack", Password = "1234" }; db.dbuser.Add(user); //throw new Exception("抛出异常"); user = new User { UserName = "David", Password = "1234" }; db.dbuser.Add(user); db.SaveChanges(); trac.Complete();//事物提交,如未执行该方法,出事务作用范围自动回滚 } } catch (Exception ex) { throw; }
f:)、T-SQL查询
1) sql 查询,实体类
//sql 查询,实体类 var userList = db.Database.SqlQuery<User>("select id,UserName,Password from [User]").ToList();
2)指定对象查询实体
var userList= db.dbuser.SqlQuery("select id,UserName,Password from [User]").ToList();
3) 执行SQL命令
db.Database.ExecuteSqlCommand("update [User] set UserName='Michel' where UserName='jay'");
常见错误解答
1、错误信息:The model backing the 'DemoConnectionContext' context has changed since the database was created. Consider using Code First Migrations to update the database (http://go.microsoft.com/fwlink/?LinkId=238269).
错误信息大体意思为:因实体类属性或实体关系、实体名称发生变化,EF脚本需重新更新数据库信息与实体保持一致。
解决方法:1.备份数据库,关闭所有数据库操作,EF框架自动更新脚本(通常删除库后重新创建库,如果数据库已经在使用,并且不想删除现有数据,不建议使用运行脚本)
2.指定不同步更新数据库,可设置为 Database.SetInitializer<DemoConnectionContext>(null);,手动更新数据库与实体类保持一致
如果此文能给你带来帮助,帮忙点个推荐,谢谢 如有任何疑问加技术Qun 594271193 交流
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。