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中,大大丰富了客户端本地可以存储的内容 ...
随机推荐
- 【Linux】ps命令
Linux中的ps命令是Process Status的缩写.ps命令用来列出系统中当前运行的那些进程.ps命令列出的是当前那些进程的快照,就是执行ps命令的那个时刻的那些进程,如果想要动态的显示进程信 ...
- synchronized和lock比较
一.synchronized的实现方案 1.synchronized能够把任何一个非null对象当成锁,实现由两种方式: a.当synchronized作用于非静态方法时,锁住的是当前对象的事例,当s ...
- MySQL -- Innodb的关闭
参数innodb_fast_shutdown控制着innodb的关闭模式,有三种取值: 0: innodb执行slow shutdown,在关闭之前要完成一次full purge和change ...
- Linux内核剖析(一)Linux的历史
Unix操作系统 Unix的由来 汤普逊和里奇最早是在贝尔实验室开发Unix的,此后的10年,Unix在学术机构和大型企业中得到了广泛的应用,当时的UNIX拥有者AT&T公司以低廉甚至免费的许 ...
- Effective Java 第三版——54. 返回空的数组或集合不要返回null
Tips 书中的源代码地址:https://github.com/jbloch/effective-java-3e-source-code 注意,书中的有些代码里方法是基于Java 9 API中的,所 ...
- Git教程学习(四)
12. 分支管理场景 多人协同工作时,你在优化代码X,需要较长时间才能完成,未完成之前会影响整体代码的使用.于是写完的代码不能提交到版本库,提交就会影响别人使用整体的代码.不提交你就失去了git的版本 ...
- GCD 之线程死锁
GCD 确实好用 ,很强大,相比NSOpretion 无法提供 取消任务的功能. 如此强大的工具用不好可能会出现线程死锁. 如下代码: - (void)viewDidLoad { [super vie ...
- Atitit mysql数据库统计信息
Atitit mysql数据库统计信息 SELECT table_name, table_rows, index_length, data_length, auto_increment, create ...
- CentOS7安装RabbitMQ
1.先安装Erlang rpm -Uvh http://www.rabbitmq.com/releases/erlang/erlang-18.1-1.el7.centos.x86_64.rpm 2.安 ...
- idea生成类注释和方法注释的正确方法
系统:Mac OS idea版本:2017.3.1 ---------------- 生成类注释 打开Preferences Editor -> File and Code Templates ...