Multi-Database Transaction Demo
public ResultM UploadFile(FileInfoM pFileInfoM)
{
ResultM result = new ResultM() { Flag = };
DbModel db = new DbModel();
DbDocModel dbDoc = new DbDocModel();
var tranDB = db.Database.BeginTransaction();
var tranDBDoc = dbDoc.Database.BeginTransaction();
try
{
//validate
var fdmtM = db.RefDocMgtType.FirstOrDefault(t => t.RefDocMgtTypeName == pFileInfoM.DocType);
if (fdmtM == null)
{
result.Flag = ; result.Msg = "不支持此文件类型!";
return result;
}
var recordM = db.Record.SingleOrDefault(t => t.ReferenceNumber == pFileInfoM.ReferenceNumber && t.RecordTypeId == );
if (recordM == null)
{
result.Flag = ; result.Msg = "找不到ReferenceNumber:" + pFileInfoM.ReferenceNumber + "对应记录!";
return result;
}
if (pFileInfoM.FileData.Length <= )
{
result.Flag = ; result.Msg = "上传文件大小不正确!";
return result;
}
byte[] bytes = pFileInfoM.FileData;
//流转换为byte
//byte[] bytes = new byte[pFileInfoM.File.Length];
//pFileInfoM.File.Read(bytes, 0, bytes.Length);
//pFileInfoM.File.Seek(0, SeekOrigin.Begin);// 设置当前流的位置为流的开始 //Create DBDocManagement
var docManagementModel = new DBDocManagement() { CreateDate = DateTime.Now, Blob = bytes, FileExtension = pFileInfoM.ExtendName };
dbDoc.DBDocManagement.Add(docManagementModel);
dbDoc.SaveChanges(); //Create FileInformation
FileInformation fileInfoModel = new FileInformation
{
Title = "Document",
FileSize = (new Func<int>(() =>
{
int val;
int.TryParse(pFileInfoM.FileSize, out val);
return val;
})).Invoke(),
OriginalFile = pFileInfoM.DocName,
AuditUserId = pFileInfoM.AuditUserId,
CreatedByUserId = pFileInfoM.AuditUserId,
UploadDate = DateTime.Now,
FileExtension = pFileInfoM.ExtendName,
CorrespondenceDate = DateTime.Now,
StatusChangedDate = DateTime.Now,
StatusChangedBy = pFileInfoM.AuditUserId,
DocMgtStatus = "I",
ExternalFileId = docManagementModel.FileId,//DocDb
RefDocMgtTypeId = fdmtM.RefDocMgtTypeId,
DocDescription = pFileInfoM.DocName.Replace("." + pFileInfoM.ExtendName, ""),
Author = pFileInfoM.Author,
StatusChangedComment = "Default Comment",
Recipient = ""
};
db.FileInformation.Add(fileInfoModel);
db.SaveChanges(); //Create Link Relationship
db.LnkRecordFile.Add(new LnkRecordFile()
{
RecordId = recordM.RecordID,
FileId = fileInfoModel.FileId,
DocMgtFolderId = ,//select DocMgtFolderId from RefDocMgtFolder where DocMgtFolderName='Documents' = 1
AuditUserId = pFileInfoM.AuditUserId
}); //Create DocMgtUserAccessControl
for (int i = ; i <= ; i++)
{
db.DocMgtUserAccessControl.Add(new DocMgtUserAccessControl()
{
FileId = fileInfoModel.FileId,
UserTypeId = i,//UserTypeId = RefUserType.UserTypeId
AuditUserId =
});
} db.SaveChanges();
tranDB.Commit();
tranDBDoc.Commit();
}
catch (Exception ex)
{
Log.Writer(ex, "UploadFile");
tranDB.Rollback();
tranDBDoc.Rollback();
result.Flag = ; result.Msg = ex.ToString();
}
finally
{
tranDB.Dispose();
tranDBDoc.Dispose();
}
return result;
}
用using Database.BeginTransaction() 可只写Commit()可不写Rollback()
Multi-Database Transaction Demo的更多相关文章
- Oracle Database Transaction Isolation Levels 事务隔离级别
Overview of Oracle Database Transaction Isolation Levels Oracle 数据库提供如下事务隔离级别: 已提交读隔离级别 可串行化隔离级别 只读隔 ...
- code first System.Data.Entity.Infrastructure.CommitFailedException: An error was reported while committing a database transaction but it could not be determined whether the transaction succeeded
System.Data.Entity.Infrastructure.CommitFailedException: An error was reported while committing a da ...
- 数据库事务(Database Transaction)概述
事务概念 事务可以用很多很多不同的方式去定义.事务是数据库操作执行的一个逻辑工作单元,是用户定义的一个数据库操作序列,这些操作要么全做要么全不做,是一个不可分割的工作单位.例如, 在关系数据库中, 一 ...
- 数据库事务(Database Transaction)
事务(Transaction)是访问并可能更新数据库中各种数据项的一个程序执行单元(unit).事务由事务开始(begin transaction)和事务结束(commit transaction或 ...
- html 5 本地数据库(Web Sql Database)核心方法openDatabase、transaction、executeSql 详解
Web SQL数据库API实际上不是HTML5规范的组成部分,而是单独的规范.它通过一套API来操纵客户端的数据库.Safari.Chrome. Firefox.Opera等主流浏览器都已经支持Web ...
- tailor multi fragment && cutom-amd script demo 说明
tailor 官方demo 中提供了一个multi fragment 的demo,这个比较简单,就是使用不同的 后端server 做为fragment ,然后使用 html tag 进行加载就可以了. ...
- Oracle Database 11g express edition
commands : show sys connect sys as sysdba or connect system as sysdba logout or disc clear screen or ...
- (转)HTML5开发学习(3):本地存储之Web Sql Database
原文:http://www.cnblogs.com/xumingxiang/archive/2012/03/25/2416386.html HTML5开发学习(3):本地存储之Web Sql Data ...
- HTML5开发学习:本地存储Web Sql Database
Web Sql Database,中文翻译作"本地数据库",是随着HTML5规范加入的在浏览器端运行的轻量级数据库. 在HTML5中,大大丰富了客户端本地可以存储的内容 ...
随机推荐
- ionic build - 修改gradle路径提升速度和成功率
ionic build 不成功很多时候是因为下载gradle太慢, 我们可以下载好gradle然后修改配置文件, 从而省去这个烦人的下载过程 1. 下载报错时的gradle zip文件, 或者直接查看 ...
- 【Zookeeper】源码分析之请求处理链(四)之FinalRequestProcessor
一.前言 前面分析了SyncReqeustProcessor,接着分析请求处理链中最后的一个处理器FinalRequestProcessor. 二.FinalRequestProcessor源码分析 ...
- android 制作9.png图
9.png图片与.png图片的具体不同之处.9.png图片的四周与普通的png图片相比多了一个像素位的白色区域,该区域只有在图片被还原和制造的时候才能看到,当打包后无法看见,并且图片的总像素会缩小2个 ...
- LINQ to Entities 比较日期
//获取当天的数据 DrawRecordDA _recordDA = new DrawRecordDA(); var query = _recordDA.GetQuery(); //筛选 当天 //q ...
- CPP Note
hello.cpp -> 编译代码g++ hello.cpp -o a -> a.out 区分大小写的编程语言 内置类型 一些基本类型可以使用一个或多个类型修饰符进行修饰: signed: ...
- openssl - 怎么打开POD格式的帮助文件
原文链接: http://zhidao.baidu.com/link?url=47I6A0YGA9FnK6galKZ5sxPSZzFGRdng2qhACb4ToBuhuyMhdrwcYpZmNI28y ...
- SNF快速开发平台--规则引擎在程序当中如何调用
规则定义完如何在程序当中进行使用呢? 其时很简单,只需要如下代码就可以调用程序: 规则定义: 调用代码: #region 演示2:生成左表数据(规则) POST: /api/DEMO/DemoSing ...
- (转) mysql中left join,right join,inner join的区别
转自:https://blog.csdn.net/qq_35975416/article/details/78842958 sql查询中有一个非常重要的环节就是表的关联查询,一般使用left join ...
- linux每日命令(3):ln命令
ln是linux中又一个非常重要命令,它的功能是为某一个文件在另外一个位置建立一个同步的链接.当我们需要在不同的目录,用到相同的文件时,我们不需要在每一个需要的目录下都放一个必须相同的文件,我们只要在 ...
- “RESOURCE MONITOR“CPU占用特别高
背景: SQL Server 2008 R2 10.50.1600 没有设置页面文件,内存为64G,数据库分配50G cpu使用占了50%以上,平时只有10-20%,某台服务器“RESOURCE MO ...