• EF(一)DB First


    “Database First”模式我们称之为“数据库优先”,前提是你的应用已经有相应的数据库,你可以使用EF设计工具根据数据库生成数据数据类,你可以使用Visual Studio模型设计器修改这些模型之间对应关系。

    一、创建ADO.NET实体集

    省略其他操作截图,创建成功,生成ModelEF.edmx。介绍生成的模型中的文件。

    二、介绍模型中的文件

    直接双击打开ModelEF.edmx文件,显示的是你创建实体集时选择的数据库表的属性图:

    展开后有个以.tt的文件,这是T4模版文件,这些模版文件用于生成数据库上下文和实体集,双击可以查看:

    数据库上下文,连接数据库全靠他了:

    其中构造函数的base里的name属性是你连接的数据库配置名称,在你的.config文件中有:

    另一个.tt文件则是生成实体类的模版文件:

    三、声明数据库上下文,进行CRUD操作

    1 //1.声明一个EF上下文
    2  EFDemoEntities dbContext = new EFDemoEntities();

     四、查询

    1 EFDemoEntities dbContext = new EFDemoEntities();
    2  foreach (var user in dbContext.T_User)
    3 {
    4         Console.WriteLine(user.NAME);
    5 }

    linq查询

    1 #region linq查询
    2 var temp = from u in dbContext.T_User
    3                        where u.ID > 1
    4                        select u;
    5 foreach (var u in temp)
    6 {
    7        Console.WriteLine(u.NAME);
    8 }
    9 #endregion

    五、增

    利用实体对象,主键如果是自增,可以不定义

     1 1.声明一个EF上下文
     2  EFDemoEntities dbContext = new EFDemoEntities();
     3 2.声明一个User实体
     4 T_User user = new T_User();
     5 user.LOGINNAME = "2";
     6 user.MAIL = "2@qq.com";
     7 user.NAME = "22";
     8 user.PASSWORD = "000000";
     9 user.PHONE = "12345678";
    10 user.ID = 1;
    11 3.告诉EF对上面的实体进行一个插入操作
    12 dbContext.T_User.Add(user);
    13 4.告诉上下文把实体的变化保存到数据库里
    14 dbContext.SaveChanges();

    六、删除

     1 //1.声明一个EF上下文
     2 EFDemoEntities dbContext = new EFDemoEntities();
     3 //2.声明一个User实体
     4 T_User user = new T_User();
     5 //user.LOGINNAME = "2";
     6 //user.MAIL = "2@qq.com";
     7 //user.NAME = "22";
     8 //user.PASSWORD = "000000";
     9 //user.PHONE = "12345678";
    10 user.ID = 1; //删除只要定义主键就好
    11 //3.告诉EF对上面的实体进行一个删除操作
    12 dbContext.Entry<T_User>(user).State = System.Data.EntityState.Deleted;
    13 //4.告诉上下文把实体的变化保存到数据库里
    14 dbContext.SaveChanges();

    七、改

    1.通过定义实体对象进行修改

     1 //1.声明一个EF上下文
     2 EFDemoEntities dbContext = new EFDemoEntities();
     3 //2.声明一个User实体
     4 T_User user = new T_User();
     5 user.LOGINNAME = "3";
     6 user.MAIL = "3@qq.com";
     7 user.NAME = "33";
     8 user.PASSWORD = "000000";
     9 user.PHONE = "12345678";
    10 user.ID = 3; //修改必须指定主键
    11 //3.告诉EF对上面的实体进行一个修改整条数据的操作
    12 dbContext.Entry<T_User>(user).State = System.Data.EntityState.Modified;
    13 //4.告诉上下文把实体的变化保存到数据库里
    14 dbContext.SaveChanges();

    2.指定修改字段

     1 //1.声明一个EF上下文
     2 EFDemoEntities dbContext = new EFDemoEntities();
     3 //2.声明一个User实体
     4 T_User user = new T_User();
     5 user.LOGINNAME = "3";
     6 user.MAIL = "3@enzemed.com";
     7 user.NAME = "33";
     8 user.PASSWORD = "000000";
     9 user.PHONE = "12345678";
    10 user.ID = 3; //修改必须指定主键
    11 //3.告诉EF对上面的实体进行某一列修改
    12 dbContext.T_User.Attach(user);
    13 dbContext.Entry<T_User>(user).Property<string>(p => p.MAIL).IsModified = true;
    14 dbContext.Entry<T_User>(user).Property<string>(p => p.LOGINNAME).IsModified = true;
    15 //4.告诉上下文把实体的变化保存到数据库里
    16 dbContext.SaveChanges();

    八、EntityState的几种状态

    Detached:对象存在,但未由对象服务跟踪。在创建实体之后、但将其添加到对象上下文之前,该实体处于此状态,即对象与上下文处于分离状态;

    Unchanged:自对象加载到上下文中后,或自上次调用 System.Data.Objects.ObjectContext.SaveChanges() 方法后,此对象尚未经过修改;

    Added:对象已添加到对象上下文,但尚未调用 System.Data.Objects.ObjectContext.SaveChanges() 方法;

    Deleted:使用 System.Data.Objects.ObjectContext.DeleteObject(System.Object) 方法从对象上下文中删除了对象;

    Modified:对象已更改,但尚未调用 System.Data.Objects.ObjectContext.SaveChanges() 方法。

    九、DbSet<TEntity>的Add和Attach

    TEntity Add(TEntity entity);

    将给定实体以 System.Data.EntityState.Added 状态添加到上下文中。保存更改后,“已添加”状态的实体将插入到数据库中。在保存更改后,对象状态将更改为System.Data.EntityState.Unchanged。

    TEntity Attach(TEntity entity);

    将给定实体以 System.Data.EntityState.Unchanged 状态附加到上下文中

    十、Expression<Func<TEntity, TProperty>>

    Func是定义委托,Expression是将委托的lamda表达式转换成sql语句。

  • 相关阅读:
    i春秋暑期训练营丨渗透测试工程师开课啦
    CTF必备技能丨Linux Pwn入门教程——环境配置
    i春秋四周年中奖名单出炉丨确认过眼神,你是中奖人
    i春秋四周年福利趴丨一纸证书教你赢在起跑线
    「你学习,我买单」i春秋四周年精品课程福利专场
    i春秋四周年庆典狂欢丨价值6000元的Web安全课程免费送啦
    倒计时3天!i春秋四周年盛典狂欢,钜惠不停
    「学习攻略」0基础转型白帽黑客第一步是什么?
    奖金高达150万元的NEST即将上线,速来报名
    「白帽挖洞技能」YxCMS 1.4.7 漏洞分析
  • 原文地址:https://www.cnblogs.com/kesteler/p/8922543.html
Copyright © 2020-2023  润新知