欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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

程序员文章站 2022-11-16 09:17:54
.Net EntityFramwork6.0 EF框架开发入门 ......
一、环境
开发环境:Sqlserver2008 R2、Visual Studio2012
 
二、准备工作
1、新建MVC空项目
2、通过NuGet获取 EntityFramework 包
 操作截图:
 
.Net EntityFramwork6.0 EF框架开发入门
 
.Net EntityFramwork6.0 EF框架开发入门
 
三、代码实现 
  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);,手动更新数据库与实体类保持一致