前一阵学习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. Oracle11g安装出现时未能满足某些最低安装要求

    需要开启C盘共享,才能检测硬件是否满足要求.cmd命令:net share c$=c::或者勾选全部忽略,继续下一步安装. 可参考https://blog.csdn.net/huazicomeon/a ...

  2. shell脚本安装python、pip-----非交互式的--批量执行函数

    首先把pip-.tgz 安装包放在 /usr/local 下面,按照顺序先安装pip,再安装python.不要先安装或只安装python,否则很容易出错, cat >>pip-python ...

  3. re&xpath&bs4

    一.re 二.xpath 三.bs4

  4. laravel 5.8 实现消息推送

    以下教程是基于5.6 的,在使用5.8实现时遇到一些问题,做一下记录 在我看来,实时通信才是 APP 应用的将来. Socket 服务通常不是那么容易实现,但是 Laravel Echo 服务改变了这 ...

  5. Skywalking部署+NetCore客户端

    一.介绍 应用官方的说法:Apache SkyWalking是观察性分析平台和应用性能管理系统.提供分布式追踪.服务网格遥测分析.度量聚合和可视化一体化解决方案 GitHub地址:https://gi ...

  6. ASP.NET(C#) 面试总结面试题大全

    一.对于 Web 性能优化,您有哪些了解和经验吗?出现指数:五颗星主要考点:这道题是博主在博客园的新闻里面看到的,回想之前几年的面试经历,发现此题出现概率还是比较高的.因为它的考面灰常广,可以让面试官 ...

  7. Object中有哪些方法及其作用

    你知道Object中有哪些方法及其作用吗? 一.引言 二.Object方法详解 1.1.registerNatives() 1.2.getClass() 1.2.1.反射三种方式: 1.3.hashC ...

  8. 【转贴】Windows常用命令实例

    Windows常用命令实例 https://www.cnblogs.com/linyfeng/p/6261629.html 熟练使用DOS常用命令有助于提高工作效率. 1.windows+R:打开运行 ...

  9. 【有奖征集】报表模板库邀您提反馈,轻松赢取P30!

    >>立即参赛 赛事初衷 大数据时代,数据的价值愈发彰显,什么样的报表才能真正帮助业务决策?这几乎是所有信息化建设的企业和个人都在思考的问题. 作为报表领域标杆企业,葡萄城于2017年推出了 ...

  10. 设计模式:职责链模式(Chain of Responsibility)

    去年参加校招要到长沙来,这个对于我来说不是特别喜欢(但又必须的来,谁叫咱不是985.211的娃呢),但是对于某些人来说就是福音了.大四还有课,而且学校抓的比较严,所以对于那些想翘课的人来说这个是最好不 ...