.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);,手动更新数据库与实体类保持一致
 
posted @ 2018-02-09 16:05  jay-lee  阅读(1336)  评论(0编辑  收藏  举报