.Net EntityFramwork6.0 EF框架开发入门

发布时间:2018/2/9 16:39:43 次浏览

一、环境
开发环境:Sqlserver2008 R2、Visual Studio2012
 
二、准备工作
1、新建MVC空项目
2、通过NuGet获取 EntityFramework 包
 操作截图:
 
 
 
三、代码实现 
  1.建立实体类 
  
1
2
3
4
5
6
7
8
9
10
11
[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;

            }
复制代码

 


常见错误解答
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);,手动更新数据库与实体类保持一致。