zoukankan      html  css  js  c++  java
  • EFDbContext的使用

    【EF框架】DbContext的使用

    2017-12-30 16:23:36 Hi-Sunshine 阅读数 12303更多

    前言

      DbContext类是EntityFramework (简称 EF)中的一个类,可以理解为一个数据库对象的实例。在 EF中,无需手动的拼接 SQL 语句对数据库进行增删改查,而是通过 DbContext 来进行相应操作。

    叙述

    DbContext类

      DbContext类是实体框架的重要组成部分。它是您的域或实体类与数据库之间的桥梁。

    DbContext是负责与数据交互作为对象的主要类。DbContext负责以下活动:
    (1)EntitySet: DbContext包含映射到数据库表的所有实体的实体集(DbSet <TEntity>)。
    (2)查询(Querying): DbContext将LINQ-to-Entities查询转换为SQL查询并将其发送到数据库。
    (3)更改跟踪(Change Tracking):跟踪实体在从数据库查询后发生的更改。
    (4)持久数据(Persisting Data):它还根据实体的状态对数据库执行插入,更新和删除操作。
    (5)缓存(Caching): DbContext默认进行一级缓存。它存储在上下文类生命周期中已经被检索的实体。
    (6)管理关系(Manage Relationship): DbContext还使用DB-First或Model-First方法使用CSDL,MSL和SSDL或者使用Code-First方法使用流利的API来管理关系。
    (7)对象实现(Object Materialization): DbContext将原始表数据转换为实体对象。

    以下是小编生成的excellentmcoinEntities类(派生DbContext的上下文类)的示例。

     
    1. //------------------------------------------------------------------------------

    2. // <auto-generated>

    3. // 此代码是根据模板生成的。

    4. //

    5. // 手动更改此文件可能会导致应用程序中发生异常行为。

    6. // 如果重新生成代码,则将覆盖对此文件的手动更改。

    7. // </auto-generated>

    8. //------------------------------------------------------------------------------

    9.  
    10. namespace Model

    11. {

    12. using System;

    13. using System.Data.Entity;

    14. using System.Data.Entity.Infrastructure;

    15.  
    16. public partial class excellentmcoinEntities : DbContext

    17. {

    18. public excellentmcoinEntities()

    19. : base("name=excellentmcoinEntities")

    20. {

    21. }

    22.  
    23. protected override void OnModelCreating(DbModelBuilder modelBuilder)

    24. {

    25. throw new UnintentionalCodeFirstException();

    26. }

    27.  
    28. public DbSet<t_accumulate> t_accumulate { get; set; }

    29. public DbSet<t_addmcoinrecord> t_addmcoinrecord { get; set; }

    30. public DbSet<t_announce> t_announce { get; set; }

    31. public DbSet<t_attribute> t_attribute { get; set; }

    32. public DbSet<t_attriuser> t_attriuser { get; set; }

    33. public DbSet<t_character> t_character { get; set; }

    34. public DbSet<t_controller> t_controller { get; set; }

    35. public DbSet<t_dayget> t_dayget { get; set; }

    36. public DbSet<t_department> t_department { get; set; }

    37. public DbSet<t_departmentgrade> t_departmentgrade { get; set; }

    38. public DbSet<t_departquestype> t_departquestype { get; set; }

    39. public DbSet<t_grade> t_grade { get; set; }

    40. public DbSet<t_healthytips> t_healthytips { get; set; }

    41. public DbSet<t_mcoin> t_mcoin { get; set; }

    42. public DbSet<t_mcoindb> t_mcoindb { get; set; }

    43. public DbSet<t_mcoindetail> t_mcoindetail { get; set; }

    44. public DbSet<t_pageset> t_pageset { get; set; }

    45. public DbSet<t_quesfamily> t_quesfamily { get; set; }

    46. public DbSet<t_quesfamilymemeber> t_quesfamilymemeber { get; set; }

    47. public DbSet<t_question> t_question { get; set; }

    48. public DbSet<t_questype> t_questype { get; set; }

    49. public DbSet<t_stageconfluence> t_stageconfluence { get; set; }

    50. public DbSet<t_states> t_states { get; set; }

    51. public DbSet<t_suggesstion> t_suggesstion { get; set; }

    52. public DbSet<t_type> t_type { get; set; }

    53. public DbSet<t_user> t_user { get; set; }

    54. public DbSet<t_attributerecord> t_attributerecord { get; set; }

    55. public DbSet<t_notice> t_notice { get; set; }

    56. }

    57. }

    58.  

    上下文类(excellentmcoinEntities)包含所有实体的DbSet <TEntity>类型的实体集。

    DbContext具体使用

    excellentmcoinEntities db = new excellentmcoinEntities();
    
    //创建对象实体,注意,这里需要对所有属性进行赋值(除了自动增长主键外),
    如果不赋值,则会数据库中会被设置为NULL(注意是否可空)
    var user = new User {
        Name = "bomo",
        Age = 21,
        Gender = "male"
    };
    db.User.Add(user);
    db.SaveChanges();

     
    1. public bool deleteUser(string UserID)

    2. {

    3. excellentmcoinEntities dbcontext = new excellentmcoinEntities();

    4. try

    5. {

    6. string[] testUserID = UserID.Split(',');

    7.  
    8. for (int i = 0; i < testUserID.Length; i++)

    9. {

    10. t_user usermodel = dbcontext.t_user.Find(testUserID[i]);

    11. dbcontext.t_user.Remove(usermodel);

    12. int flag = dbcontext.SaveChanges();

    13. if (flag > 0)

    14. {

    15. continue;

    16. }

    17. else

    18. {

    19. return false;

    20. }

    21. }

    22. return true;

    23. }

    24. catch (Exception)

    25. {

    26.  
    27. throw new Exception("删除失败");

    28. }

    29. }

     
    1. public bool EditUser(t_user usermodel)

    2. {

    3. excellentmcoinEntities dbcontext = new excellentmcoinEntities();

    4. try

    5. {

    6. t_user user = dbcontext.t_user.Find(usermodel.userID);

    7. if (user == null)

    8. {

    9. return false;

    10. }

    11. user.userName = usermodel.userName;

    12. user.levelID = usermodel.levelID;

    13. user.state = usermodel.state;

    14. user.passWord = usermodel.passWord;

    15.  
    16. //修改多个字段值

    17. dbcontext.Entry<t_user>(user).State = System.Data.EntityState.Modified;

    18. dbcontext.SaveChanges();

    19. return true;

    20. }

    21. catch (Exception)

    22. {

    23.  
    24. throw new Exception("用户修改失败");

    25. }

    26.  
    27. }

     
    1. public List<userModel> QueryAUser()

    2. {

    3. //定义了上下文实体

    4. excellentmcoinEntities dbcontext = new excellentmcoinEntities();

    5. var allUser = (from u in dbcontext.t_user

    6. join g in dbcontext.t_grade on u.gradeID equals g.gradeID

    7. orderby u.totalMcoin descending

    8. select new userModel()

    9. {

    10. userID = u.userID,

    11. userName = u.userName,

    12. userGrade = g.userGrade,

    13. totalMcoin = u.totalMcoin,

    14. gradeID = g.gradeID,

    15. }).ToList();

    16. return allUser;

    17. }

    小结

        DbContext通常与包含模型的根实体的DbSet <TEntity>属性的派生类型一起使用。当派生类的实例被创建时,这些集合会自动初始化。

  • 相关阅读:
    ec20 queclocator V1. 0 test
    javascript JSON.parse and JSON.stringify
    linux command pushd popd
    learning gcc #pragma once
    learning gcc __BEGIN_DECLS and __END_DECLS
    aarch-linux-gnu-g++ install
    启用”开始“菜单中的“运行”功能
    获取本机安装的软件清单
    固定任务栏
    优化菜单显示速度
  • 原文地址:https://www.cnblogs.com/grj001/p/12223627.html
Copyright © 2011-2022 走看看