前一阵学习mvc但是对于关联表的数据操作总是分裂开来写,这样有很大的侥幸,比如嵌套了3个

if(){

if(){

if(){

}

}

}

如果前两个都是true那么最后一个是false了,这样是不想看到的结果,这样的话前两个数据已经操作成功了数据库已经存在记录了,但是第三个没有成功,这样就不能保证这个数据属性的一致性了,

其实即使一个错误的写法,但是一直不知道怎么办,之前在三层里面所有的sql语句执行都会有一个sqltransaction的封装的事物方法调用,但是在mvc中使用linq  to  sql 却不知道怎么办了,

最后有群友提示用存储写,这个还没有测试,先把事物的这个写一下吧。对于初学者一个建议。首先要=》添加引用System.Transactions=》在代码中引用using System.Transactions;

下面是几种测试的情况,效果会解释出,但是不敢说绝对正确,毕竟能力有限。

11111111111111111111111111111111111111111111111111111111111111111111111111111111111

using (TransactionScope scope = new TransactionScope())
            {
                try
                {
                    Students sd = new Students()
                    {
                        Sex = 0,
                        StudentName = "赵七语文语文"
                    };
                    db.Students.Add(sd);
                    Courses cs = new Courses()
                    {
                        CourseName = "语文语文语文语文语文语文语文"//这个会报错,因为数据库的大小设置为nvarchar(2),错误;将截断二进制。。。。这个大家都明白是为啥,不解释了
                    };

db.Courses.Add(cs);
                    db.SaveChanges();
                    scope.Complete();
                }
                catch (Exception)
                {

throw;
                }
            }

这个事物会回滚

22222222222222222222222222222222222222222222222222222222222222222222
                try
                {
                    Students sd = new Students()
                    {
                        Sex = 0,
                        StudentName = "赵七语文语文"

};
                    db.Students.Add(sd);
                    Courses cs = new Courses()
                    {
                        CourseName = "语文语文语文语文语文语文语文"
                    };

db.Courses.Add(cs);
                    db.SaveChanges();
                }
                catch (Exception)
                {
                    
                    throw;
                }

这个没有用事物但是只有一个db.SaveChanges();这样同样可以达到效果,两条数据都没有插入但数据库,可以理解db.SaveChanges();提交时做了一个整体的提交,我想它也是一个事物提交的原理,或者这个方法就是

有事物。具体没有研究。

3333333333333333333333333333333333333333333333333333333333333333

using (TransactionScope scope = new TransactionScope())
            {
                try
                {
                    Students sd = new Students()
                    {
                        Sex = 0,
                        StudentName = "赵七语文语文"

};
                    db.Students.Add(sd);
                    db.SaveChanges();
                    Courses cs = new Courses()
                    {
                        CourseName = "语文语文语文语文语文语文语文"
                    };
                    db.Courses.Add(cs);
                    db.SaveChanges();
                    scope.Complete();
                }
                catch (Exception)
                {
                    
                    throw;
                }
            }

这个同样可以实现事物回滚,这里有一个地方可以很明显的看到这个using块的执行,我们上面是两个实体,当断点执行完第一个db.SaveChanges();时候我们可以到数据库下一个简单的查询句

就是查询刚刚添加数据的这个表,这时你会发现这条语句会一直在执行,只要你的代码断点还在那里不用这条语句就查不出来数据,这说明,这个代码块或者是整体提交数据到数据库的,这样就似乎就更明白

了(这个不必纠结只是个人发现的)

4444444444444444444444444444444444444444444444444444444444444444444444
                try
                {
                    Students sd = new Students()
                    {
                        Sex = 0,
                        StudentName = "赵七语文语文"

};
                    db.Students.Add(sd);
                    db.SaveChanges();
                    Courses cs = new Courses()
                    {
                        CourseName = "语文语文语文语文语文语文语文"
                    };
                    db.Courses.Add(cs);
                    db.SaveChanges();
                }
                catch (Exception)
                {
                    
                    throw;
                }

这个写法会抛出错误,但是第一个实体的数据已经保存到数据库,但是第二条数据没有保存,这就是我刚开始遇到的一直困惑的问题。表达的浅显希望卡伊采纳。

、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、

MVC 事物的更多相关文章

  1. MVC 事物同时保存,更新数据库

    本人小白一枚,第一次写博,主要用作笔记,怕以后忘记了,大神尙可路过,也可多多指教 事物用在同时保存更新数据时,及只要在事物块的范围内,有一个操作出错则事物块所有更新,保存等操作都不会执行        ...

  2. EF+LINQ事物处理 C# 使用NLog记录日志入门操作 ASP.NET MVC多语言 仿微软网站效果(转) 详解C#特性和反射(一) c# API接受图片文件以Base64格式上传图片 .NET读取json数据并绑定到对象

    EF+LINQ事物处理   在使用EF的情况下,怎么进行事务的处理,来减少数据操作时的失误,比如重复插入数据等等这些问题,这都是经常会遇到的一些问题 但是如果是我有多个站点,然后存在同类型的角色去操作 ...

  3. .NET MVC+ EF+通用存储过程实现增删改功能以及使用事物处理

    引摘: 1.EF对事务进行了封装:无论何时执行任何涉及Create,Update或Delete的查询,都会默认创建事务.当DbContext类上的SaveChanges()方法被调用时,事务就会提交, ...

  4. Devexpress MVC Gridview 获取到增删改的所有行数据(JSON) 并使用SQL事物保存数据

    //ModalChargeGridView Gridview的名字//Con_Shp_Chg 数据库表名//ConShpChgUID UID或者是标识列//gs_Language 语言(中英文)//l ...

  5. 从Script到Code Blocks、Code Behind到MVC、MVP、MVVM

    刚过去的周五(3-14)例行地主持了技术会议,主题正好是<UI层的设计模式——从Script.Code Behind到MVC.MVP.MVVM>,是前一天晚上才定的,中午花了半小时准备了下 ...

  6. Dapper逆天入门~强类型,动态类型,多映射,多返回值,增删改查+存储过程+事物案例演示

    Dapper的牛逼就不扯蛋了,答应群友做个入门Demo的,现有园友需要,那么公开分享一下: 完整Demo:http://pan.baidu.com/s/1i3TcEzj 注 意 事 项:http:// ...

  7. 6.在MVC中使用泛型仓储模式和依赖注入实现增删查改

    原文链接:http://www.c-sharpcorner.com/UploadFile/3d39b4/crud-operations-using-the-generic-repository-pat ...

  8. ASP.NET MVC Model绑定(二)

    ASP.NET MVC Model绑定(二) 前言 上篇对于Model绑定的简单演示想必大家对Model绑定的使用方式有一点的了解,那大家有没有想过Model绑定器是在什么时候执行的?又或是执行的过程 ...

  9. 【移动前端开发实践】从无到有(统计、请求、MVC、模块化)H5开发须知

    前言 不知不觉来百度已有半年之久,这半年是996的半年,是孤军奋战的半年,是跌跌撞撞的半年,一个字:真的是累死人啦! 我所进入的团队相当于公司内部创业团队,人员基本全部是新招的,最初开发时连数据库都没 ...

随机推荐

  1. linux卸载Python3

    一.卸载Python3 1.卸载python3 rpm -qa|grep python3|xargs rpm -ev --allmatches --nodeps 卸载pyhton3 2.whereis ...

  2. Java实现批量下载选中文件功能

    1.在action中定义变量 ? 1 2 3 4 5 6 private List<String> downLoadPaths = new ArrayList<String>( ...

  3. 2019.06.05 ABAP EXCEL 操作类代码 OLE方式(模板下载,excel上传,内表下载)

    一般使用标准的excel导入方法9999行,修改了标准的excel导入FM 整合出类:excel的 模板下载,excel上传,ALV内表下载功能. 在项目一开始可以SE24创建一个类来供整体开发使用, ...

  4. linux常用命令(14)which命令

    我们经常在linux要查找某个文件,但不知道放在哪里了,可以使用下面的一些命令来搜索:    which  查看可执行文件的位置.   whereis 查看文件的位置.    locate   配合数 ...

  5. idea 中提示:Warning:java: 源值1.5已过时, 将在未来所有发行版中删除

    maven的配置文件settings.xml中添加: <profile> <id>jdk-1.8</id> <activation> <activ ...

  6. 使用第三方UITableView+FDTemplateLayoutCell计算cell行高注意点

    现在很方便的计算单元格的行高大部分都是使用的第三方框架UITableView+FDTemplateLayoutCell,不知道你在使用这个框架的时候有没有遇到和我一样的问题,比如: 在这样计算cell ...

  7. JAVA学习记录<一>

    一: JAVA初体验: 1.JAVA简介: 2.环境搭建: 3:MyEclipse的使用简介: 4:程序的移植:项目的导入,导出. 5:学习JAVA的经验: 多写,多问,总结和复习!!!

  8. Array js扩展方法 forEach()

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  9. springboot 极简使用例子: redis,MySql数据库,日志,netty,打包和运行

    配置 创建项目的时候选择 application.yml内容如下 spring: redis: host: 127.0.0.1 port: 6379 database: 0 datasource: d ...

  10. confluent部署:

    confluent介绍https://www.cnblogs.com/dadadechengzi/p/9506964.html kafka connect:https://www.cnblogs.co ...