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的更多相关文章

  1. Oracle Database Transaction Isolation Levels 事务隔离级别

    Overview of Oracle Database Transaction Isolation Levels Oracle 数据库提供如下事务隔离级别: 已提交读隔离级别 可串行化隔离级别 只读隔 ...

  2. 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 ...

  3. 数据库事务(Database Transaction)概述

    事务概念 事务可以用很多很多不同的方式去定义.事务是数据库操作执行的一个逻辑工作单元,是用户定义的一个数据库操作序列,这些操作要么全做要么全不做,是一个不可分割的工作单位.例如, 在关系数据库中, 一 ...

  4. 数据库事务(Database Transaction)

    事务(Transaction)是访问并可能更新数据库中各种数据项的一个程序执行单元(unit).事务由事务开始(begin transaction)和事务结束(commit transaction或 ...

  5. html 5 本地数据库(Web Sql Database)核心方法openDatabase、transaction、executeSql 详解

    Web SQL数据库API实际上不是HTML5规范的组成部分,而是单独的规范.它通过一套API来操纵客户端的数据库.Safari.Chrome. Firefox.Opera等主流浏览器都已经支持Web ...

  6. tailor multi fragment && cutom-amd script demo 说明

    tailor 官方demo 中提供了一个multi fragment 的demo,这个比较简单,就是使用不同的 后端server 做为fragment ,然后使用 html tag 进行加载就可以了. ...

  7. Oracle Database 11g express edition

    commands : show sys connect sys as sysdba or connect system as sysdba logout or disc clear screen or ...

  8. (转)HTML5开发学习(3):本地存储之Web Sql Database

    原文:http://www.cnblogs.com/xumingxiang/archive/2012/03/25/2416386.html HTML5开发学习(3):本地存储之Web Sql Data ...

  9. HTML5开发学习:本地存储Web Sql Database

       Web Sql Database,中文翻译作"本地数据库",是随着HTML5规范加入的在浏览器端运行的轻量级数据库.    在HTML5中,大大丰富了客户端本地可以存储的内容 ...

随机推荐

  1. python 网络工具 scapy 介绍

    作者介绍,这是个万能的网络工具,除了可以查看 TCP/IP 各层的报文,还可以发送报文.可以说是一个万能工具,作者嚣张的说, “it can replace hping, 85% of nmap, a ...

  2. orocos_kdl学习(一):坐标系变换

    KDL中提供了点(point).坐标系(frame).刚体速度(twist),以及6维力/力矩(wrench)等基本几何元素,具体可以参考 Geometric primitives 文档. Creat ...

  3. 如何免费的让网站启用https

    本文源自酷壳:如何免费的让网站启用HTTPS 今天,我把CoolShell变成https的安全访问了.我承认这件事有点晚了,因为之前的HTTP的问题也有网友告诉我,被国内的电信运营商在访问我的网站时加 ...

  4. 网站菜单CSS

    #site-nav .down-menu a{height:88px;line-height:88px;border-bottom:0px solid #9e5ae2;transition-durat ...

  5. [转]抛弃jQuery,使用原生JavaScript

    原文链接 Document Ready 事件 在jQuery中,document.ready可以让代码在整个文档加载完毕之后执行: $(document).ready(function() { // ...

  6. 【Babble】批量学习与增量学习、稳定性与可塑性矛盾的乱想

    一.开场白 做机器学习的对这几个词应该比较熟悉了. 最好是拿到全部数据,那就模型慢慢选,参数慢慢调,一轮一轮迭代,总能取得不错效果. 但是面对新来数据,怎么能利用已经训练好的模型,把新的信息加进去? ...

  7. CentOS7.4安装配置mysql8 TAR免安装版

    下载mysql: https://dev.mysql.com/downloads/mysql/ 解压tar.xz文件:先 xz -d mysql-8.0.15-linux-glibc2.12-x86_ ...

  8. mysql服务启动、停止、重启

    如何启动/停止/重启MySQL 一.启动方式 1.使用 service 启动:service mysqld start 2.使用 mysqld 脚本启动:/etc/inint.d/mysqld sta ...

  9. Spring Boot 2.0 利用 Spring Security 实现简单的OAuth2.0认证方式2

    0.前言 经过前面一小节已经基本配置好了基于SpringBoot+SpringSecurity+OAuth2.0的环境.这一小节主要对一些写固定InMemory的User和Client进行扩展.实现动 ...

  10. (转)解决类似 /usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.21' not found 的问题

    转自:https://itbilu.com/linux/management/NymXRUieg.html 源码编译升级安装了gcc后,编译程序或运行其它程序时,有时会出现类似/usr/lib64/l ...