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. 微软补丁安装工具wusa报错。

    命令行需要msu格式的补丁安装文件的全路径,否则报错.

  2. <转>房租分配问题

    本文转自:https://blog.codingnow.com/2012/12/share_rent.html 今天读到策划同学的周报中提到的一个关于合租房子的分摊房租问题. 引用周报中的一节如下: ...

  3. Python多进程库multiprocessing中进程池Pool类的使用[转]

    from:http://blog.csdn.net/jinping_shi/article/details/52433867 Python多进程库multiprocessing中进程池Pool类的使用 ...

  4. Easyui datagrid 特殊处理,记录笔记

    1. 特殊的单元格样式 columns中 { field: , styler: function (value, row, index) { ') { return 'background-color ...

  5. Shell函数的7种用法介绍

    1. 在shell文件内部定义函数并引用: 复制代码代码如下: [~/shell/function]# cat factorial.sh #!/bin/bashfunction factorial{f ...

  6. 译: 4. RabbitMQ Spring AMQP 之 Routing 路由

    在上一个教程中,我们构建了一个简单的fanout(扇出)交换.我们能够向许多接收者广播消息. 在本教程中,我们将为其添加一个功能 - 我们将只能订阅一部分消息.例如,我们将只能将消息指向感兴趣的特定颜 ...

  7. T-Pot平台cowrie蜜罐暴力破解探测及实现自动化邮件告警

    前言:Cowrie是基于kippo更改的中交互ssh蜜罐, 可以对暴力攻击账号密码等记录,并提供伪造的文件系统环境记录黑客操作行为, 并保存通过wget/curl下载的文件以及通过SFTP.SCP上传 ...

  8. linux每日命令(21):find命令之exec

    find是我们很常用的一个Linux命令,但是我们一般查找出来的并不仅仅是看看而已,还会有进一步的操作,这个时候exec的作用就显现出来了. 一. exec参数说明: -exec 参数后面跟的是com ...

  9. OpenGL教程一

    引自:https://blog.csdn.net/u013654125/article/details/73613644 GLEW, GLFW和GLM介绍 现在你有了工程,就让我们开始介绍下工程所用到 ...

  10. mongo 删除内嵌数组元素

    文档格式如下: { "_id" : ObjectId("56e2a92ccc6dd2271953e502"), "links": [ { & ...