BExIS.Dlm.Services.Data.DatasetManager.checkOutDataset C# (CSharp) Метод

checkOutDataset() приватный Метод

checks out the dataset and creates a new version on it. The new version acts like a working copy while it is not committed, hence editable.
private checkOutDataset ( System.Int64 datasetId, string username, System.DateTime timestamp ) : bool
datasetId System.Int64
username string
timestamp System.DateTime
Результат bool
        private bool checkOutDataset(Int64 datasetId, string username, DateTime timestamp)
        {
            bool checkedOut = false;
            //XmlDocument doc = new XmlDocument();
            //doc.LoadXml(@"<Metadata>Empty</Metadata>");

            using (IUnitOfWork uow = this.GetUnitOfWork())
            {
                IRepository<Dataset> repo = uow.GetRepository<Dataset>();
                var q = repo.Query(p => p.Id == datasetId && p.Status == DatasetStatus.CheckedIn && (p.CheckOutUser.Equals(string.Empty) || p.CheckOutUser == null));
                Dataset ds = q.FirstOrDefault();
                if (ds != null)
                {
                    DatasetVersion dsNewVersion = new DatasetVersion()
                    {
                        Timestamp = timestamp,
                        //Metadata = doc,
                        //ExtendedPropertyValues = new List<ExtendedPropertyValue>(),
                        //ContentDescriptors = new List<ContentDescriptor>(),
                        Status = DatasetVersionStatus.CheckedOut,
                        Dataset = ds,
                    };
                    // if there is a previous version, copy its metadata, content descriptors and extended property values to the newly created version
                    if (ds.Versions.Count() > 0)
                    {
                        var previousCheckedInVersion = ds.Versions.Where(p => p.Status == DatasetVersionStatus.CheckedIn).First();
                        if (previousCheckedInVersion != null && previousCheckedInVersion.Timestamp >= timestamp) // it is an error
                        {
                            throw new Exception(string.Format("The provided timestamp {0} is earlier than the timestamp of the latest checked in version!", timestamp));
                        }
                        if (previousCheckedInVersion != null)
                        {
                            dsNewVersion.Metadata = previousCheckedInVersion.Metadata;
                            dsNewVersion.ExtendedPropertyValues = previousCheckedInVersion.ExtendedPropertyValues;
                            foreach (var item in previousCheckedInVersion.ContentDescriptors)
                            {
                                ContentDescriptor cd = new ContentDescriptor()
                                {
                                    MimeType = item.MimeType,
                                    Name = item.Name,
                                    OrderNo = item.OrderNo,
                                    URI = item.URI,
                                    DatasetVersion = dsNewVersion,
                                };
                                dsNewVersion.ContentDescriptors.Add(cd);
                            }
                        }
                    }
                    ds.Status = DatasetStatus.CheckedOut;
                    ds.LastCheckIOTimestamp = timestamp;
                    ds.CheckOutUser = getUserIdentifier(username);
                    ds.Versions.Add(dsNewVersion);
                    repo.Put(ds);
                    uow.Commit();
                    checkedOut = true;
                }
            }
            return (checkedOut);
        }