• Multi-Database Transaction Demo


    public ResultM UploadFile(FileInfoM pFileInfoM)
            {
                ResultM result = new ResultM() { Flag = 1 };
                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 = 0; result.Msg = "不支持此文件类型!";
                        return result;
                    }
                    var recordM = db.Record.SingleOrDefault(t => t.ReferenceNumber == pFileInfoM.ReferenceNumber && t.RecordTypeId == 20);
                    if (recordM == null)
                    {
                        result.Flag = 0; result.Msg = "找不到ReferenceNumber:" + pFileInfoM.ReferenceNumber + "对应记录!";
                        return result;
                    }
                    if (pFileInfoM.FileData.Length <= 0)
                    {
                        result.Flag = 0; 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 = 1,//select DocMgtFolderId from RefDocMgtFolder where DocMgtFolderName='Documents' = 1
                        AuditUserId = pFileInfoM.AuditUserId
                    });
    
                    //Create DocMgtUserAccessControl
                    for (int i = 1; i <= 3; i++)
                    {
                        db.DocMgtUserAccessControl.Add(new DocMgtUserAccessControl()
                        {
                            FileId = fileInfoModel.FileId,
                            UserTypeId = i,//UserTypeId = RefUserType.UserTypeId
                            AuditUserId = 1
                        });
                    }
    
                    db.SaveChanges();
                    tranDB.Commit();
                    tranDBDoc.Commit();
                }
                catch (Exception ex)
                {
                    Log.Writer(ex, "UploadFile");
                    tranDB.Rollback();
                    tranDBDoc.Rollback();
                    result.Flag = 0; result.Msg = ex.ToString();
                }
                finally
                {
                    tranDB.Dispose();
                    tranDBDoc.Dispose();
                }
                return result;
            }
    用using
    Database.BeginTransaction() 可只写Commit()可不写Rollback()
    
    
  • 相关阅读:
    按回车键提交表单
    Access数据库类型及属性
    Problem 1002
    问题 1003
    Problem 1003
    Switch Game(摘自LP学C++)
    1006
    膜拜蛇形矩阵
    A == B?
    Rectangles
  • 原文地址:https://www.cnblogs.com/lee2011/p/6233204.html
Copyright © 2020-2023  润新知