zoukankan      html  css  js  c++  java
  • 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语句。

  • 相关阅读:
    UVALive 7509 Dome and Steles
    HDU 5884 Sort
    Gym 101194H Great Cells
    HDU 5451 Best Solver
    HDU 5883 The Best Path
    HDU 5875 Function
    卡特兰数
    UVa 11729 Commando War 突击战
    UVa 11292 The Dragon of Loowater 勇者斗恶龙
    Spark Scala Flink版本对应关系
  • 原文地址:https://www.cnblogs.com/kesteler/p/8922543.html
Copyright © 2011-2022 走看看