zoukankan      html  css  js  c++  java
  • EntityFramework:我想我需要和 Session.Save 语义一样的方法

    背景

    EntityFramework 中 DbSet.Add 方法不会导致立即执行 insert 语句,这在长事务中非常有用,不过多数用例都是短事务的,为何我需要一个立即执行 insert 语句的方法呢?本文就是在思考这个问题。

    先看一个代码

    代码

     1 using System;
     2 using System.Collections.Generic;
     3 using System.Linq;
     4 using System.Text;
     5 using System.Threading.Tasks;
     6 
     7 using EntityFrameworkStudy.Studys;
     8 
     9 namespace EntityFrameworkStudy
    10 {
    11     class Program
    12     {
    13         static void Main(string[] args)
    14         {
    15             using (var context = new StudyContext())
    16             {
    17                 context.Database.ExecuteSqlCommand("DELETE FROM Articles WHERE Title = '鸭梨'");
    18 
    19                 AddNotExistArticle(context);
    20                 AddNotExistArticle(context);
    21 
    22                 context.SaveChanges();
    23 
    24                 Console.WriteLine(context.Articles.Where(x => x.Title == "鸭梨").Count());
    25             }
    26         }
    27 
    28         private static void AddNotExistArticle(StudyContext context)
    29         {
    30             var order = context.Articles.FirstOrDefault(x => x.Title == "鸭梨");
    31             if (order == null)
    32             {
    33                 context.Articles.Add(new Article() { Title = "鸭梨" });
    34             }
    35         }
    36     }
    37 }

    输出结果为 2,而我原本期望的结果是 1。

    正常的思考思路是:我已经 Add 了,再用 FirstOrDefault 查询就应该能获取到,这在一个真实的项目场景中(调用栈不是这么简单、涉及批量操作),这种 Bug 非常容易形成。

    如何模拟 Session.Save 的语义

    NHibernate 中的 Session.Save 会立即执行 insert 语句,如何模拟这种语义呢?

    还没有想到方法,朋友们给点意见。

    备注

    今天为问题而来。

  • 相关阅读:
    Selenium中的几种等待方式,需特别注意implicitlyWait的用法
    在chrome下的文本框sendkeys,提示element can't focus--解决方法
    selenium 切换窗口 每次成功code
    xpath实例 --//span[contains(.,'资讯管理')]
    SQL 常用语句
    TestNG教程
    ant常用命令
    win server服务安装
    又一次受启发
    firefox安装firebugXPath Checker
  • 原文地址:https://www.cnblogs.com/happyframework/p/3362679.html
Copyright © 2011-2022 走看看