• Entity FrameWork的增删改和查询、延迟加载、EF下的多表链接查询


    1。Entity FrameWork的增删改:

     demoEntities db = new demoEntities();//EF上下文

    Product product = new Product();
    //product.PName = "zifu";
    //product.DelFlag = 0;
    //db.Product.AddObject(product);//AddObject的方法的本质为先Attach,后db.ObjectStateManager.ChangeObjectState(product, EntityState.Added),最后SaveChanges()。
    //db.SaveChanges();

    product.Id = 3;
    product.PName = "这是第三项";
    product.DelFlag = 0;
    db.Product.Attach(product);
    db.ObjectStateManager.ChangeObjectState(product, EntityState.Added);//添 加时不关心 db中的主见
    //db.ObjectStateManager.ChangeObjectState(product, EntityState.Deleted);//删 除那一项
    //查询;
    //db.ObjectStateManager.ChangeObjectState(product, EntityState.Modified);//修 改那一项


    int res = db.SaveChanges();
    Console.WriteLine(res);

    2。Entity FrameWork的查询1:

    var temp = from c in db.Product
    where c.Id > 4
    select c;

    foreach (var product1 in temp)

    {
    Console.WriteLine(product1.PName);
    }

    3。Entity FrameWork的查询2:

    var temp = db.Order.Where<Order>(o => o.ID > 3);
    foreach (var t in temp)
    {
    Console.WriteLine(t.OName);
    }

    4。延迟加载:(多表联合添加  进行延迟加载添加数据)

    UserInfo userInfo = new UserInfo();
    userInfo.UName = "xiaosan";
    userInfo.Sex = "f";
    userInfo.Age = 20;

    Order order1 = new Order();
    Order order2 = new Order();
    order1.OName = "content 1";
    order1.DelFlag = 0;
    order1.UserInfoID = userInfo.ID;

    order2.OName = "content 2";
    order2.DelFlag = 0;
    order2.UserInfoID = userInfo.ID;


    db.UserInfo.AddObject(userInfo);
    db.Order.AddObject(order1);
    db.Order.AddObject(order2);

    int res = db.SaveChanges();//最后保存到db中[延迟加载]

    Console.WriteLine(res);\

    5。多表链接查询:

    var temp = from c in db.Order
    select new { myId = c.ID, orderName = c.OName, userInfoName = c.UserInfo.UName };
    //c.UserInfo为订单表的外表用户表;EF根据向导关联的,所以可以找到订单表所对应的用户表;
    foreach (var item in temp)
    {

    Console.WriteLine("order:{0}--orderName:{1}--对应的用户名称:{2}", item.myId, item.orderName, item.userInfoName);


    }

    6。延迟加载二:

    var temp = from c in db.UserInfo
    select c;
    //multiple 10 子表查10次;datatable 弱类型:不知道那些列;强类型的可以点出来;
    // 下面这种查询可以避免两个表的join;
    foreach (var userInfo in temp)
    {
    Console.WriteLine(userInfo.ID);
    foreach (var order in userInfo.Order)
    {
    Console.WriteLine(order.OName);
    }
    }

    7。查询单个实体:

    var temp = (from u in db.UserInfo
    where u.ID == 1
    select u).FirstOrDefault();
    if (temp != null)
    {
    temp.UName = "first uname";
    db.SaveChanges();
    }

    8。查询单个实体:

    var temp = (from u in db.UserInfo
    where u.ID == 1
    select u).FirstOrDefault();//First();Single();SingleOrDefault();
    Console.WriteLine(temp.UName);//打印
    if (temp != null)
    {
    temp.UName = "first uname";//查询出来之后,可以直接对其进行更改操作;
    db.SaveChanges();//保存到数据库中;
    }

    9。分页:

    var temp = db.Order.Where<Order>(o => true)//Order 可以去掉
    .OrderBy(o => o.ID)
    .Skip<Order>(10)//Order 可以去掉
    .Take<Order>(10);//Order 可以去掉
    foreach (var singleOrder in temp)
    {
    Console.WriteLine("{0}---{1}", singleOrder.ID, singleOrder.OName);
    }

    10。上下文管理:

    //ObjectContext obj=new ObjectContext();
    // 一个请求指定一个上下文实例;
    //把上下文放到httpContext,httpContext->CallContext(线程内唯一的数据槽);

  • 相关阅读:
    [LeetCode] 1072. Flip Columns For Maximum Number of Equal Rows
    [LeetCode] 1730. Shortest Path to Get Food
    [LeetCode] 1005. Maximize Sum Of Array After K Negations
    [LeetCode] 1286. Iterator for Combination
    [LeetCode] 390. Elimination Game
    [LeetCode] 1940. Longest Common Subsequence Between Sorted Arrays
    [LeetCode] 794. Valid TicTacToe State
    [LeetCode] 1162. As Far from Land as Possible
    [LeetCode] 2022. Convert 1D Array Into 2D Array
    [LeetCode] LeetCode 2021勋章
  • 原文地址:https://www.cnblogs.com/LpRightNow/p/2838870.html
Copyright © 2020-2023  润新知