前一阵学习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. FAQ_2

    FAQ-2 1.LoadRunner超时错误: 在录制Web服务器端,如果超过120秒服务器协议脚本回放时超时情况经常出现,产生错误的原因也有很多,解决的方法也不同. 错误现象1:Action.c(1 ...

  2. MySQL 将 字符串 转为 整数

    MySQL 将 字符串 转为 整数 1.CAST(epr AS type) 1)type 为 SIGNED " AS SIGNED); 效果如下: 2)type 为 UNSIGNED &qu ...

  3. Initializer for conditional binding must have Optional type, not 'String'

    今天看到问Swift问题:  Initializer for conditional binding must have Optional type, not 'String' 以前没遇到过这个问题, ...

  4. pycharm设置背景颜色

    https://jingyan.baidu.com/article/9faa7231f88570473c28cb88.html

  5. Python Deque 模块使用详解,python中yield的用法详解

    Deque模块是Python标准库collections中的一项. 它提供了两端都可以操作的序列, 这意味着, 你可以在序列前后都执行添加或删除. https://blog.csdn.net/qq_3 ...

  6. java:Echarts,POI

    1.Echarts: demo.js: function demo(selector){ var myEcharts=echarts.init(selector); var option = { ti ...

  7. 虚拟机安装: vmware + ubuntu16.04

    参考博客:https://blog.csdn.net/qq1326702940/article/details/82322079 这个博客讲的很详细,只要ubuntu版本相同,应该是一模一样. 注意点 ...

  8. CRLF、CR、LF详解

    名词解释 CR:Carriage Return,对应ASCII中转义字符\r,表示回车 LF:Linefeed,对应ASCII中转义字符\n,表示换行 CRLF:Carriage Return &am ...

  9. JCC指令

    0.JMP1.JE, JZ 结果为零则跳转(相等时跳转) ZF=12.JNE, JNZ 结果不为零则跳转(不相等时跳转) ZF=03.JS   结果为负则跳转   SF=14.JNS   结果为非负则 ...

  10. (5.6)mysql高可用系列——MySQL Utilities 管理工具

    关键词:mysql工具集,mysql管理工具,mysql utilities [1]安装mysql utilities cd /download wget https://cdn.mysql.com/ ...