Exemple #1
0
        /// <summary>
        /// Find out if a bidirectional relation exists, if exists then add entity to the collection
        /// </summary>
        /// <param name="manyToOneType">Many to one relation</param>
        /// <param name="childEntityType">Entity type of the child</param>
        /// <param name="propertyName">Property name of the ManyToOne realtion</param>
        /// <param name="childEntityInfo">Entity info of the child</param>
        /// <param name="childMeta">Child metadata</param>
        /// <returns>true if the child entity was added or removed from the parent entity collection, otherwise false</returns>
        private bool TryToFindAndLinkBidirectionalRelation(ManyToOneType manyToOneType,
                                                           EntityType childEntityType, string propertyName,
                                                           EntityInfo childEntityInfo, IClassMetadata childMeta)
        {
            var fk             = FindForeignKey(propertyName, childMeta);
            var parentMeta     = _session.SessionFactory.GetClassMetadata(manyToOneType.ReturnedClass);
            var propNames      = parentMeta.PropertyNames;
            var propTypes      = parentMeta.PropertyTypes;
            var childPersister = childMeta as AbstractEntityPersister;

            if (childPersister == null)
            {
                return(false);
            }
            var colProp = new Dictionary <string, string>();

            for (var i = 0; i < childPersister.PropertyNames.Length; i++)
            {
                var propName = childPersister.PropertyNames[i];
                var propType = childPersister.GetPropertyType(propName);
                if (propType.IsAssociationType)
                {
                    continue;
                }
                foreach (var col in childPersister.GetPropertyColumnNames(i))
                {
                    if (col == null)
                    {
                        continue; // formula
                    }
                    if (!colProp.ContainsKey(col))
                    {
                        colProp.Add(col, propName);
                    }
                }
            }
            if (childPersister.IdentifierType.IsComponentType)
            {
                var componentType = (ComponentType)childPersister.IdentifierType;
                for (var i = 0; i < componentType.PropertyNames.Length; i++)
                {
                    colProp.Add(childPersister.IdentifierColumnNames[i], componentType.PropertyNames[i]);
                }
            }
            else
            {
                foreach (var col in childPersister.IdentifierColumnNames)
                {
                    colProp.Add(col, childPersister.IdentifierPropertyName);
                }
            }


            for (var i = 0; i < propNames.Length; i++)
            {
                var propType = propTypes[i];
                var propName = propNames[i];
                if (!propType.IsAssociationType || !propType.IsCollectionType)
                {
                    continue;
                }
                var colType = (CollectionType)propType;

                var refCols  = colType.GetReferencedColumns(_session.GetSessionImplementation().Factory);
                var refProps = refCols.Select(refCol => !colProp.ContainsKey(refCol) ? refCol : colProp[refCol]).ToArray();
                if (NHMetadataBuilder.CatColumnNames(refProps) != fk)
                {
                    continue;
                }

                var elmType = colType.GetElementType(_session.GetSessionImplementation().Factory);
                if (!elmType.ReturnedClass.IsAssignableFrom(childMeta.MappedClass))
                {
                    continue;
                }

                var parentEntity = GetRelatedEntity(propertyName, childEntityType, childEntityInfo, childMeta);
                if (parentEntity == null)
                {
                    return(false);
                }

                var coll = parentMeta.GetPropertyValue(parentEntity, propName) as IEnumerable;

                if (coll == null) //Should happen only if the parent entity is not in db
                {
                    //TODO: instantiate collection
                    continue;
                }
                var collType = coll.GetType();

                //Initialize collection in order to prevent flushing
                if (!NHibernateUtil.IsInitialized(coll))
                {
                    NHibernateUtil.Initialize(coll);
                }

                if (colType.ReturnedClass.IsGenericType)
                {
                    var state = childEntityInfo.EntityState;
                    if (_saveMap.ContainsKey(manyToOneType.ReturnedClass))
                    {
                        var parentEntityInfo =
                            _saveMap[manyToOneType.ReturnedClass].FirstOrDefault(o => o.Entity == parentEntity);
                        if (parentEntityInfo != null)
                        {
                            switch (parentEntityInfo.EntityState)
                            {
                            case EntityState.Added:
                                //if the parent is added then we need to add child to the collection even if the it is only updated or unmodified
                                if (state != EntityState.Deleted)
                                {
                                    state = EntityState.Added;
                                }
                                break;

                            case EntityState.Deleted:
                                //TODO: check for cascade option
                                break;

                            case EntityState.Modified:
                                break;
                            }
                        }
                    }

                    //TODO: check if parent is new
                    switch (state)
                    {
                    case EntityState.Deleted:
                        var removeMethod = collType.GetMethod("Remove") ??
                                           collType.GetInterfaces()
                                           .Select(o => o.GetMethod("Remove"))
                                           .FirstOrDefault(o => o != null);
                        var removed = false;
                        if (removeMethod != null)
                        {
                            IEqualityComparer comparer = new EntityComparer(childMeta);

                            foreach (var item in coll)
                            {
                                if (comparer.Equals(item, childEntityInfo.Entity))
                                {
                                    removed = (bool)removeMethod.Invoke(coll, new[] { item });
                                    break;
                                }
                            }
                        }
                        childMeta.SetPropertyValue(childEntityInfo.Entity, propertyName, null);    //Remove relation on both sides
                        return(removed);

                    case EntityState.Added:
                        var addMethod = collType.GetMethod("Add") ??
                                        collType.GetInterfaces()
                                        .Select(o => o.GetMethod("Add"))
                                        .FirstOrDefault(o => o != null);
                        if (addMethod != null)
                        {
                            addMethod.Invoke(coll, new[] { childEntityInfo.Entity });
                            return(true);
                        }
                        break;
                    }
                }
                //TODO: non generic collections
            }
            return(false);
        }
Exemple #2
0
        public ActionResult SendEmailtoIT(int?id)
        {
            if (id == null)
            {
                return(new HttpStatusCodeResult(HttpStatusCode.BadRequest));
            }
            T_Employee t_employee = null;

            if (db != null)
            {
                t_employee = db.T_Employees.Find(id);
                t_employee.setDateTimeToClientTime();
                if (t_employee == null)
                {
                    return(HttpNotFound());
                }
            }
            //db is null for 'invoke action' business rule, set your own context here and find object - todo
            //db.Entry(t_employee).State = EntityState.Modified; //change state if only you want to modify t_employee object

            string emailTo    = "*****@*****.**";
            string subject    = "WSH Update";
            string msgDetails = "";
            string style      = "";

            msgDetails = EntityComparer.EnumeratePropertyValues <T_Employee>(t_employee, "T_Employee", new string[] { "T_SSN", "T_DateOfBirth", "T_CurrentEmployeePayDetailsID", "T_CurrentEmployeeEmploymentProfileID", "T_CurrentEmployeeJobAssignmentID" });

            msgDetails = msgDetails.Replace("</table></div>", "");
            //current service record
            style       = "background-color: #ffffff; color: black;";
            msgDetails += "<tr style=\"" + style + "\"><td width=200>" + ("Employee Type" + " </td><td> " + t_employee.t_currentemployeeemploymentprofile.t_employmentrecordemployeetype.DisplayValue + "</td></tr>");
            style       = "background-color: #eeeeee; color: black;";
            msgDetails += "<tr style=\"" + style + "\"><td width=200>" + ("Hired At Facility" + " </td><td> " + t_employee.t_currentemployeeemploymentprofile.t_employmentrecordhiredatfacility.DisplayValue + "</td></tr>");
            style       = "background-color: #ffffff; color: black;";
            msgDetails += "<tr style=\"" + style + "\"><td width=200>" + ("Hire Date" + " </td><td> " + t_employee.t_currentemployeeemploymentprofile.T_HireDate + "</td></tr>");
            style       = "background-color: #eeeeee; color: black;";
            msgDetails += "<tr style=\"" + style + "\"><td width=200>" + ("Separation Date" + " </td><td> " + t_employee.t_currentemployeeemploymentprofile.T_TerminationDate + "</td></tr>");
            //primary job assignment
            style       = "background-color: #ffffff; color: black;";
            msgDetails += "<tr style=\"" + style + "\"><td width=200>" + ("Supervisor" + " </td><td> " + t_employee.t_currentemployeejobassignment.t_employeesupervisor.DisplayValue + "</td></tr>");
            style       = "background-color: #eeeeee; color: black;";
            msgDetails += "<tr style=\"" + style + "\"><td width=200>" + ("Manager" + " </td><td> " + t_employee.t_currentemployeejobassignment.t_jobassignmentmanageremployee.DisplayValue + "</td></tr>");
            style       = "background-color: #ffffff; color: black;";
            msgDetails += "<tr style=\"" + style + "\"><td width=200>" + ("Position Level" + " </td><td> " + t_employee.t_currentemployeejobassignment.t_positionjobassignment.DisplayValue + "</td></tr>");

            msgDetails += "</table></div>";

            SendEmail         mail      = new SendEmail();
            RegisterViewModel usermodel = new RegisterViewModel();

            var EmailTemplate = db.EmailTemplates.FirstOrDefault(e => e.associatedemailtemplatetype.DisplayValue == "Business Rule");

            if (EmailTemplate != null)
            {
                string mailbody = string.Empty;
                if (!string.IsNullOrEmpty(EmailTemplate.EmailContent))
                {
                    mailbody = EmailTemplate.EmailContent;
                    mailbody = mailbody.Replace("###Message###", msgDetails);
                }
                if (!string.IsNullOrEmpty(EmailTemplate.EmailSubject))
                {
                    subject = EmailTemplate.EmailSubject;
                }
                emailTo = string.Join(",", emailTo.Split(',').Distinct().ToArray());
                mail.Notify(usermodel.UserName, emailTo, mailbody, subject);
            }
            return(Json("Success", "application/json", System.Text.Encoding.UTF8, JsonRequestBehavior.AllowGet));
        }
Exemple #3
0
        public void CRUD_Test()
        {
            var repositoryContext = new RepositoryContext();

            Account expectedAccount = TestEntities.GetTestAccount(
                1,
                Guid.Parse("B2A4DF0B-B0B4-46E6-A308-6DFB79909CD3"),
                "AccOld");

            try
            {
                // delete test account
                TestDataCleaner.DeleteTestAccount(repositoryContext, expectedAccount.AccountId);

                // create
                repositoryContext.AccountRepository.Upsert(expectedAccount);

                // read by id
                Account actualAccount = repositoryContext.AccountRepository.Get(expectedAccount.AccountId);
                Assert.IsNotNull(actualAccount);
                Assert.IsTrue(EntityComparer.AreAccountEqual(expectedAccount, actualAccount));

                if (expectedAccount.AccountGuid.HasValue)
                {
                    // read by guid
                    actualAccount = repositoryContext.AccountRepository.Get(expectedAccount.AccountGuid.Value);
                    Assert.IsNotNull(actualAccount);
                    Assert.IsTrue(EntityComparer.AreAccountEqual(expectedAccount, actualAccount));
                }

                int?actualAccountId;

                if (expectedAccount.AccountGuid.HasValue)
                {
                    // read id by guid
                    actualAccountId = repositoryContext.AccountRepository.GetId(expectedAccount.AccountGuid.Value);
                    Assert.AreEqual(expectedAccount.AccountId, actualAccountId);
                }

                // read id by account number
                actualAccountId = repositoryContext.AccountRepository.GetId(expectedAccount.AccountNumber);
                Assert.AreEqual(expectedAccount.AccountId, actualAccountId);

                // update
                Account expectedAccountNew =
                    TestEntities.GetTestAccount(2, expectedAccount.AccountGuid.Value, "AccNew");
                repositoryContext.AccountRepository.Upsert(expectedAccountNew);
                Assert.AreEqual(expectedAccount.AccountId, expectedAccountNew.AccountId);

                Account actualAccountNew = repositoryContext.AccountRepository.Get(expectedAccountNew.AccountId);
                Assert.IsNotNull(actualAccountNew);
                Assert.IsTrue(EntityComparer.AreAccountEqual(expectedAccountNew, actualAccountNew));

                // delete
                repositoryContext.AccountRepository.Delete(expectedAccount.AccountId);

                // read by id
                actualAccount = repositoryContext.AccountRepository.Get(expectedAccount.AccountId);
                Assert.IsNull(actualAccount);

                if (expectedAccount.AccountGuid.HasValue)
                {
                    // read by guid
                    actualAccount = repositoryContext.AccountRepository.Get(expectedAccount.AccountGuid.Value);
                    Assert.IsNull(actualAccount);

                    // read id by guid
                    actualAccountId = repositoryContext.AccountRepository.GetId(expectedAccount.AccountGuid.Value);
                    Assert.IsNull(actualAccountId);
                }

                // read id by account number
                actualAccountId = repositoryContext.AccountRepository.GetId(expectedAccount.AccountNumber);
                Assert.IsNull(actualAccountId);
            }
            finally
            {
                // delete test account
                TestDataCleaner.DeleteTestAccount(repositoryContext, expectedAccount.AccountId);

                repositoryContext.Dispose();
            }
        }
Exemple #4
0
 public void Setup()
 {
     _comparer = new EntityComparer <Log>();
 }
Exemple #5
0
        public IQuery GenerateInsertQuery(IReadOnlyList <DatabaseKey> keys, IDatabaseTableData tableData)
        {
            if (keys.Count == 0)
            {
                return(Queries.Empty());
            }

            IMultiQuery query = Queries.BeginTransaction();

            query.Add(GenerateDeleteQuery(tableData.TableDefinition, keys));

            if (tableData.Entities.Count == 0)
            {
                return(query.Close());
            }

            var columns = tableData.TableDefinition.TableColumns
                          .Select(c => c.Value)
                          .Where(col => !col.IsMetaColumn && !col.IsConditionColumn)
                          .GroupBy(columns => columns.ForeignTable ?? tableData.TableDefinition.TableName)
                          .ToDictionary(g => g.Key, g => g.ToList());

            HashSet <EntityKey> entityKeys = new();
            Dictionary <string, List <Dictionary <string, object?> > > inserts = new(tableData.Entities.Count);

            List <string> duplicates = new List <string>();
            var           comparer   = new EntityComparer(tableData.TableDefinition);

            foreach (var entity in tableData.Entities.OrderBy(t => t, comparer))
            {
                if (!entity.Phantom && !keys.Contains(entity.Key))
                {
                    continue;
                }

                bool duplicate = tableData.TableDefinition.PrimaryKey != null && !entityKeys.Add(new EntityKey(entity, tableData.TableDefinition));
                foreach (var table in columns)
                {
                    bool isDefault   = true;
                    bool isMainTable = table.Key == tableData.TableDefinition.TableName;
                    var  cells       = table.Value.ToDictionary(c => c.DbColumnName, c =>
                    {
                        var cell = entity.GetCell(c.DbColumnName) !;
                        if (c.AutogenerateComment != null && cell is DatabaseField <string> sField)
                        {
                            var evaluator = new DatabaseExpressionEvaluator(calculatorService, parameterFactory, tableData.TableDefinition, c.AutogenerateComment !);
                            var comment   = evaluator.Evaluate(entity);
                            if (comment is string s)
                            {
                                return(s.AddComment(sField.Current.Value));
                            }
                        }

                        var columnDefinition = tableData.TableDefinition.TableColumns[cell.FieldName];
                        if (!columnDefinition.CanBeNull && cell.Object is null)
                        {
                            return(columnDefinition.Default ?? 0L);
                        }
                        if (columnDefinition.CanBeNull && cell.Object is null)
                        {
                            return(null);
                        }
                        if (!isMainTable && columnDefinition.IsTypeFloat && ((cell.Object == null && columnDefinition.Default != null) || cell.Object != null && !cell.Object.Equals(columnDefinition.Default ?? 0f)))
                        {
                            isDefault = false;
                        }
                        if (!isMainTable && columnDefinition.IsTypeLong && ((cell.Object == null && columnDefinition.Default != null) || cell.Object != null && !cell.Object.Equals(columnDefinition.Default ?? 0L)))
                        {
                            isDefault = false;
                        }
                        return(FixUnixTimestampAndNullability(columnDefinition, cell.Object));
                    });
                    if (!isMainTable)
                    {
                        if (isDefault)
                        {
                            continue;
                        }

                        var newCells    = new Dictionary <string, object?>();
                        var foreignKeys = tableData.TableDefinition.ForeignTableByName ![table.Key].ForeignKeys;
Exemple #6
0
        /// <summary>
        /// Updates the resources.
        /// </summary>
        /// <param name="request">The request.</param>
        public static void UpdateResources(CalendarEventUpdateResourcesRequest request)
        {
            if (request == null)
            {
                throw new ArgumentNullException("request");
            }

            ListRequest  listRequest  = null;
            ListResponse listResponse = null;
            //Get the event primary key from target
            PrimaryKeyId eventId = request.Target.PrimaryKeyId.Value;
            //Возможные новые pk
            Dictionary <PrimaryKeyId, PrimaryKeyId> primaryKeyMap = null;

            List <ResourceActionWrapper> resourceActions = new List <ResourceActionWrapper>();

            //Determine update or create actions
            foreach (EntityObject entityObject in request.EntityObjects)
            {
                if (entityObject.MetaClassName == CalendarEventResourceEntity.ClassName)
                {
                    //Assign eventId properties
                    entityObject[CalendarEventResourceEntity.FieldEventId] = eventId;

                    listRequest         = (ListRequest)EventHelper.ConstructRequest <ListRequest>(entityObject, false);
                    listRequest.Filters = ConstructFilterByEntity(entityObject);
                    listResponse        = (ListResponse)BusinessManager.Execute(listRequest);
                    //BusinessManager.List(entityObject.MetaClassName, ConstructFilterByEntity(entityObject));
                    if (listResponse.EntityObjects.Length != 0)
                    {
                        //Update disable
                        //foreach (EntityObject existEntity in listResponse.EntityObjects)
                        //{
                        //    entityObject.PrimaryKeyId = existEntity.PrimaryKeyId;
                        //    resourceActions.Add(new ResourceActionWrapper(entityObject, new UpdateRequest()));
                        //}
                    }
                    else
                    {
                        resourceActions.Add(new ResourceActionWrapper(entityObject, new CreateRequest()));
                    }
                }
            }
            //Determine delete action
            listRequest         = (ListRequest)EventHelper.ConstructRequest <ListRequest>(new CalendarEventResourceEntity(), false);
            listRequest.Filters = new FilterElement[] { new FilterElement(CalendarEventResourceEntity.FieldEventId, FilterElementType.Equal, eventId) };
            listResponse        = (ListResponse)BusinessManager.Execute(listRequest);
            foreach (CalendarEventResourceEntity resourceEntity in listResponse.EntityObjects)
            {
                EntityComparer entityComp = new EntityComparer(resourceEntity, CalendarEventResourceEntity.ComparedProperties);
                if (Array.Find <EntityObject>(request.EntityObjects, entityComp.CompareEntity) == null)
                {
                    resourceActions.Add(new ResourceActionWrapper(resourceEntity, new DeleteRequest()));
                }
            }
            //Пытаемся разбить event на exception
            if (resourceActions.Count != 0)
            {
                bool exceptionCreated;
                primaryKeyMap = EventHelper.PrepareChangeData((VirtualEventId)eventId, out exceptionCreated);
            }
            //Execute action
            foreach (ResourceActionWrapper resourceAction in resourceActions)
            {
                //получаем возможно новый pk event
                eventId = EventHelper.FindDestiantionId(primaryKeyMap, eventId);
                //получаем возможно новый pk resource
                if (resourceAction.ResourceEntity.PrimaryKeyId != null)
                {
                    resourceAction.ResourceEntity.PrimaryKeyId = EventHelper.FindDestiantionId(primaryKeyMap,
                                                                                               resourceAction.ResourceEntity.PrimaryKeyId.Value);
                }
                //записываем возможно изменившийся pk event-a
                resourceAction.ResourceEntity[CalendarEventResourceEntity.FieldEventId] = eventId;
                //вызываем запросы на модификацию
                BusinessManager.Execute(resourceAction.ResourceActionRequest);
            }
        }
Exemple #7
0
        public void CRUD_Test()
        {
            var repositoryContext = new RepositoryContext();

            Account testAccount = TestEntities.GetTestAccount(
                1,
                Guid.Parse("579526DD-D75C-46E2-8A30-A1D3828F92A5"),
                "UserOld");

            try
            {
                // delete test account
                TestDataCleaner.DeleteTestAccount(repositoryContext, testAccount.AccountId);

                // create account
                repositoryContext.AccountRepository.Upsert(testAccount);

                // create
                User expectedUser = TestEntities.GetTestUser(
                    1,
                    Guid.Parse("86641E45-CB9C-4CC3-93EB-E6D26FDC91BE"),
                    "User",
                    testAccount.AccountId);

                repositoryContext.UserRepository.Upsert(expectedUser);

                // read by id
                User actualUser = repositoryContext.UserRepository.Get(expectedUser.UserId);
                Assert.NotNull(actualUser);
                Assert.True(EntityComparer.AreUserEqual(expectedUser, actualUser));

                // read by guid
                if (expectedUser.UserGuid.HasValue)
                {
                    actualUser = repositoryContext.UserRepository.Get(expectedUser.UserGuid.Value);
                    Assert.NotNull(actualUser);
                    Assert.True(EntityComparer.AreUserEqual(expectedUser, actualUser));
                }

                // read by logon name
                actualUser = repositoryContext.UserRepository.Get(expectedUser.LogonName);
                Assert.NotNull(actualUser);
                Assert.True(EntityComparer.AreUserEqual(expectedUser, actualUser));

                int?actualUserId;

                // read id by guid
                if (expectedUser.UserGuid.HasValue)
                {
                    actualUserId = repositoryContext.UserRepository.GetId(expectedUser.UserGuid.Value);
                    Assert.Equal(expectedUser.UserId, actualUserId);
                }

                // read id by logon name
                actualUserId = repositoryContext.UserRepository.GetId(expectedUser.LogonName);
                Assert.Equal(expectedUser.UserId, actualUserId);

                // update
                User expectedUserNew = TestEntities.GetTestUser(
                    2,
                    expectedUser?.UserGuid.Value ?? null,
                    "UserNew",
                    expectedUser.AccountId);

                repositoryContext.UserRepository.Upsert(expectedUserNew);
                Assert.Equal(expectedUser.UserId, expectedUserNew.UserId);

                User actualUserNew = repositoryContext.UserRepository.Get(expectedUserNew.UserId);
                Assert.NotNull(actualUserNew);
                Assert.True(EntityComparer.AreUserEqual(expectedUserNew, actualUserNew));

                // delete
                repositoryContext.UserRepository.Delete(expectedUserNew.UserId);

                // read by id
                actualUser = repositoryContext.UserRepository.Get(expectedUserNew.UserId);
                Assert.Null(actualUser);

                if (expectedUserNew.UserGuid.HasValue)
                {
                    // read by guid
                    actualUser = repositoryContext.UserRepository.Get(expectedUserNew.UserGuid.Value);
                    Assert.Null(actualUser);
                }

                // read by logon name
                actualUser = repositoryContext.UserRepository.Get(expectedUser.LogonName);
                Assert.Null(actualUser);

                if (expectedUserNew.UserGuid.HasValue)
                {
                    // read id by guid
                    actualUserId = repositoryContext.UserRepository.GetId(expectedUserNew.UserGuid.Value);
                    Assert.Null(actualUserId);
                }

                // read id by logon name
                actualUserId = repositoryContext.UserRepository.GetId(expectedUserNew.LogonName);
                Assert.Null(actualUserId);

                // test by account

                // create users
                var expectedUsers = new List <User>
                {
                    TestEntities.GetTestUser(
                        1,
                        Guid.Parse("5B446BFB-7BCF-4A49-84EA-EB8D738F11DF"),
                        "User1",
                        testAccount.AccountId),

                    TestEntities.GetTestUser(
                        2,
                        Guid.Parse("EC15A8F5-941B-4C46-8EDA-83CD5B42E482"),
                        "User2",
                        testAccount.AccountId)
                };

                foreach (User user in expectedUsers)
                {
                    repositoryContext.UserRepository.Upsert(user);
                }

                // read by account
                List <User> actualUsers = repositoryContext.UserRepository.GetByAccount(testAccount.AccountId);
                Assert.Equal(expectedUsers.Count, actualUsers.Count);

                foreach (User user in expectedUsers)
                {
                    actualUser = actualUsers.Single(ar => ar.UserGuid == user.UserGuid);
                    Assert.True(EntityComparer.AreUserEqual(user, actualUser));
                }

                // delete by account
                repositoryContext.UserRepository.DeleteByAccount(testAccount.AccountId);

                // read by account
                actualUsers = repositoryContext.UserRepository.GetByAccount(testAccount.AccountId);
                Assert.Empty(actualUsers);
            }
            finally
            {
                // delete test account
                TestDataCleaner.DeleteTestAccount(repositoryContext, testAccount.AccountId);

                repositoryContext.Dispose();
            }
        }
        public void CompareCollectionObjectEqualityTest()
        {
            var original = new Order
            {
                Id    = Guid.NewGuid().ToString(),
                Items = new List <OrderLine>
                {
                    new OrderLine {
                        Sku = "XYZ-123", Quanity = 1, UnitPrice = 10000
                    },
                    new OrderLine {
                        Sku = "abc-123", Quanity = 1, UnitPrice = 10000
                    }
                }
            };

            var current = new Order
            {
                Id    = original.Id,
                Items = new List <OrderLine>
                {
                    new OrderLine {
                        Sku = "abc-123", Quanity = 2, UnitPrice = 5000
                    },
                    new OrderLine {
                        Sku = "xyz-123", Quanity = 2, UnitPrice = 5000
                    }
                }
            };

            var configuration = new Configuration();

            configuration.Configure(config => config
                                    .Entity <Order>(e =>
            {
                e.Collection(p => p.Items)
                .CollectionComparison(CollectionComparison.ObjectEquality)
                .ElementEquality((o, c) =>
                {
                    var l = o as OrderLine;
                    var r = c as OrderLine;

                    return(string.Equals(l?.Sku, r?.Sku, StringComparison.OrdinalIgnoreCase));
                });
            })
                                    .Entity <OrderLine>(e =>
            {
                e.Property(p => p.Sku).Equality(StringEquality.OrdinalIgnoreCase);
            })
                                    );
            var comparer = new EntityComparer(configuration);

            var changes = comparer.Compare(original, current);

            changes.Should().NotBeNull();
            changes.Count.Should().Be(4);

            changes[0].Path.Should().Be("Items[0].Quanity");
            changes[1].Path.Should().Be("Items[0].UnitPrice");
            changes[2].Path.Should().Be("Items[1].Quanity");
            changes[3].Path.Should().Be("Items[1].UnitPrice");

            WriteMarkdown(changes);
        }
        public void CompareComplexCompareTest()
        {
            var original = new Contact
            {
                Id         = Guid.NewGuid().ToString(),
                Created    = DateTime.Now,
                Updated    = DateTime.Now,
                FirstName  = "Jim",
                LastName   = "Bob",
                JobTitle   = "CEO",
                Status     = Status.New,
                Roles      = new[] { "Administrator", "User" },
                Categories = new HashSet <string> {
                    "Person", "Owner"
                },
                Data = new Dictionary <string, object>
                {
                    { "Boost", 1 },
                    { "Path", "./home" }
                },
                EmailAddresses = new List <EmailAddress>
                {
                    new EmailAddress {
                        Address = "*****@*****.**", Type = ContactType.Business
                    },
                    new EmailAddress {
                        Address = "*****@*****.**", Type = ContactType.Personal
                    },
                },
                MailingAddresses = new List <MailingAddress>
                {
                    new MailingAddress
                    {
                        Address1 = "123 Main St",
                        City     = "New York",
                        State    = "NY",
                        Zip      = "10026"
                    }
                },
                PhoneNumbers = new List <PhoneNumber>
                {
                    new PhoneNumber {
                        Number = "888-555-1212", Type = ContactType.Business
                    }
                }
            };

            var current = new Contact
            {
                Id         = original.Id,
                Created    = original.Created,
                Updated    = original.Updated.AddSeconds(1),
                FirstName  = "Jim",
                LastName   = "Bob",
                JobTitle   = "CEO",
                Status     = Status.Verified,
                Roles      = new[] { "User" },
                Categories = new HashSet <string> {
                    "Person", "Owner", "Blah"
                },
                Data = new Dictionary <string, object>
                {
                    { "Boost", 2 },
                    { "Path", "./path" }
                },
                EmailAddresses = new List <EmailAddress>
                {
                    new EmailAddress {
                        Address = "*****@*****.**", Type = ContactType.Business
                    },
                    new EmailAddress {
                        Address = "*****@*****.**", Type = ContactType.Personal
                    },
                    new EmailAddress {
                        Address = "*****@*****.**", Type = ContactType.Home
                    },
                },
                MailingAddresses = new List <MailingAddress>
                {
                    new MailingAddress
                    {
                        Address1 = "123 Main St",
                        City     = "New York",
                        State    = "NY",
                        Zip      = "10027"
                    }
                },
                PhoneNumbers = new List <PhoneNumber>
                {
                    new PhoneNumber {
                        Number = "800-555-1212", Type = ContactType.Business
                    }
                }
            };

            var configuration = new Configuration();

            configuration.Configure(config => config
                                    .Entity <Contact>(e =>
            {
                e.Property(p => p.FirstName).Display("First Name");
                e.Collection(p => p.Roles)
                .CollectionComparison(CollectionComparison.ObjectEquality)
                .ElementEquality(StringEquality.OrdinalIgnoreCase);
                e.Collection(p => p.EmailAddresses).ElementFormatter(v =>
                {
                    var address = v as EmailAddress;
                    return(address?.Address);
                });
            })
                                    .Entity <EmailAddress>(e =>
            {
                e.Property(p => p.Address).Display("Email Address");
            })
                                    );

            var comparer = new EntityComparer(configuration);
            var changes  = comparer.Compare(original, current);

            changes.Should().NotBeNull();
            changes.Count.Should().Be(10);

            WriteMarkdown(changes);
        }
        public void CRUD_Test()
        {
            var repositoryContext = new RepositoryContext();

            Account testAccount = TestEntities.GetTestAccount(
                1,
                Guid.Parse("64651A7C-CB82-4F45-92CA-397AD8519D75"),
                "AccRole");

            try
            {
                // delete test account
                TestDataCleaner.DeleteTestAccount(repositoryContext, testAccount.AccountId);

                // create account
                repositoryContext.AccountRepository.Upsert(testAccount);

                // create
                AccountRole expectedAccountRole = TestEntities.GetTestAccountRole(
                    1,
                    Guid.Parse("7B46F4DD-1E5E-47F9-ADBB-A37A60B1BAB2"),
                    testAccount.AccountId,
                    "AccRoleOld");
                repositoryContext.AccountRoleRepository.Upsert(expectedAccountRole);

                // read by id
                AccountRole actualAccountRole =
                    repositoryContext.AccountRoleRepository.Get(expectedAccountRole.AccountRoleId);
                Assert.NotNull(actualAccountRole);
                Assert.True(EntityComparer.AreAccountRoleEqual(expectedAccountRole, actualAccountRole));

                if (expectedAccountRole.AccountRoleGuid.HasValue)
                {
                    // read by guid
                    actualAccountRole =
                        repositoryContext.AccountRoleRepository.Get(expectedAccountRole.AccountRoleGuid.Value);
                    Assert.NotNull(actualAccountRole);
                    Assert.True(EntityComparer.AreAccountRoleEqual(expectedAccountRole, actualAccountRole));
                }

                int?actualAccountRoleId;

                if (expectedAccountRole.AccountRoleGuid.HasValue)
                {
                    // read id by guid
                    actualAccountRoleId =
                        repositoryContext.AccountRoleRepository.GetId(expectedAccountRole.AccountRoleGuid.Value);
                    Assert.AreEqual(expectedAccountRole.AccountRoleId, actualAccountRoleId);
                }

                // read id by account id and role name
                actualAccountRoleId = repositoryContext.AccountRoleRepository.GetId(
                    expectedAccountRole.AccountId,
                    expectedAccountRole.RoleName);
                Assert.AreEqual(expectedAccountRole.AccountRoleId, actualAccountRoleId);

                // update
                AccountRole expectedAccountRoleNew = TestEntities.GetTestAccountRole(
                    2,
                    expectedAccountRole?.AccountRoleGuid.Value ?? null,
                    expectedAccountRole.AccountId,
                    "AccRoleNew");

                expectedAccountRoleNew.AccountRoleGuid = expectedAccountRole.AccountRoleGuid;
                repositoryContext.AccountRoleRepository.Upsert(expectedAccountRoleNew);
                Assert.AreEqual(expectedAccountRole.AccountRoleId, expectedAccountRoleNew.AccountRoleId);

                AccountRole actualAccountRoleNew =
                    repositoryContext.AccountRoleRepository.Get(expectedAccountRoleNew.AccountRoleId);
                Assert.NotNull(actualAccountRoleNew);
                Assert.True(EntityComparer.AreAccountRoleEqual(expectedAccountRoleNew, actualAccountRoleNew));

                // delete
                repositoryContext.AccountRoleRepository.Delete(expectedAccountRoleNew.AccountRoleId);

                // read by id
                actualAccountRole = repositoryContext.AccountRoleRepository.Get(expectedAccountRoleNew.AccountRoleId);
                Assert.Null(actualAccountRole);

                if (expectedAccountRoleNew.AccountRoleGuid.HasValue)
                {
                    // read by guid
                    actualAccountRole =
                        repositoryContext.AccountRoleRepository.Get(expectedAccountRoleNew.AccountRoleGuid.Value);
                    Assert.Null(actualAccountRole);

                    // read id by guid
                    actualAccountRoleId =
                        repositoryContext.AccountRoleRepository.GetId(expectedAccountRoleNew.AccountRoleGuid.Value);
                    Assert.Null(actualAccountRoleId);
                }

                // read id by account id and role number
                actualAccountRoleId = repositoryContext.AccountRoleRepository.GetId(
                    expectedAccountRoleNew.AccountId,
                    expectedAccountRoleNew.RoleName);
                Assert.Null(actualAccountRoleId);

                // test by account

                // create account roles
                var expectedAccountRoles = new List <AccountRole>
                {
                    TestEntities.GetTestAccountRole(
                        1,
                        Guid.Parse("AF8F597E-82A3-4184-932D-6AA31DA4E6F2"),
                        testAccount.AccountId,
                        "AccRole1")
                };

                foreach (AccountRole accountRole in expectedAccountRoles)
                {
                    repositoryContext.AccountRoleRepository.Upsert(accountRole);
                }

                // read by account
                var actualAccountRoles = new List <AccountRole>
                {
                    repositoryContext.AccountRoleRepository.GetByAccount(testAccount.AccountId)
                };
                Assert.AreEqual(expectedAccountRoles.Count, actualAccountRoles.Count);

                foreach (AccountRole accountRole in expectedAccountRoles)
                {
                    actualAccountRole =
                        actualAccountRoles.Single(ar => ar.AccountRoleGuid == accountRole.AccountRoleGuid);
                    Assert.True(EntityComparer.AreAccountRoleEqual(accountRole, actualAccountRole));
                }

                // delete by account
                repositoryContext.AccountRoleRepository.DeleteByAccount(testAccount.AccountId);

                // read by account
                actualAccountRoles = new List <AccountRole>
                {
                    repositoryContext.AccountRoleRepository.GetByAccount(testAccount.AccountId)
                };
                Assert.IsEmpty(actualAccountRoles);
            }
            finally
            {
                // delete test account
                TestDataCleaner.DeleteTestAccount(repositoryContext, testAccount.AccountId);

                repositoryContext.Dispose();
            }
        }
Exemple #11
0
        public void CRUD_Test()
        {
            var repositoryContext = new RepositoryContext();

            Account testAccount = TestEntities.GetTestAccount(
                1,
                Guid.Parse("DA8306F8-B255-4737-925C-AACCA7EB2B87"),
                "UserRole");

            try
            {
                // delete test account
                TestDataCleaner.DeleteTestAccount(repositoryContext, testAccount.AccountId);

                // create account
                repositoryContext.AccountRepository.Upsert(testAccount);

                // create account roles
                AccountRole testAccountRole1 = TestEntities.GetTestAccountRole(
                    1,
                    Guid.Parse("FFDEA1D7-78BA-414C-8A7B-A3B09A50DDF2"),
                    testAccount.AccountId,
                    "UserRole1");

                repositoryContext.AccountRoleRepository.Upsert(testAccountRole1);

                AccountRole testAccountRole2 = TestEntities.GetTestAccountRole(
                    2,
                    Guid.Parse("B0775CA4-7339-4127-BDF3-440B85F71AC5"),
                    testAccount.AccountId,
                    "UserRole2");
                repositoryContext.AccountRoleRepository.Upsert(testAccountRole2);

                // create user
                User testUser = TestEntities.GetTestUser(
                    1,
                    Guid.Parse("EE837AA8-D3B8-47D4-B5DF-23E389BCFBA4"),
                    "UserRole",
                    testAccount.AccountId);
                repositoryContext.UserRepository.Upsert(testUser);

                // create
                UserRole expectedUserRole = TestEntities.GetTestUserRole(
                    testUser.UserId,
                    testAccountRole1.AccountRoleId);
                repositoryContext.UserRoleRepository.Add(expectedUserRole);

                // read
                UserRole actualUserRole = repositoryContext.UserRoleRepository.Get(
                    expectedUserRole.UserId,
                    expectedUserRole.AccountRoleId);
                Assert.NotNull(actualUserRole);
                Assert.True(EntityComparer.AreUserRoleEqual(expectedUserRole, actualUserRole));

                // delete
                repositoryContext.UserRoleRepository.Delete(expectedUserRole.UserId, expectedUserRole.AccountRoleId);

                // read
                actualUserRole = repositoryContext.UserRoleRepository.Get(
                    expectedUserRole.UserId,
                    expectedUserRole.AccountRoleId);
                Assert.Null(actualUserRole);

                // test by user

                // create user roles
                var expectedUserRoles = new List <UserRole>
                {
                    TestEntities.GetTestUserRole(testUser.UserId, testAccountRole1.AccountRoleId),
                    TestEntities.GetTestUserRole(testUser.UserId, testAccountRole2.AccountRoleId)
                };

                foreach (UserRole userRole in expectedUserRoles)
                {
                    repositoryContext.UserRoleRepository.Add(userRole);
                }

                // read by user
                List <UserRole> actualUserRoles = repositoryContext.UserRoleRepository.Get(testUser.UserId);
                Assert.AreEqual(expectedUserRoles.Count, actualUserRoles.Count);

                foreach (UserRole userRole in expectedUserRoles)
                {
                    actualUserRole =
                        actualUserRoles.Single(
                            ur => ur.UserId == userRole.UserId && ur.AccountRoleId == userRole.AccountRoleId);
                    Assert.True(EntityComparer.AreUserRoleEqual(userRole, actualUserRole));
                }

                // delete by user
                repositoryContext.UserRoleRepository.Delete(testUser.UserId);

                // read by user
                actualUserRoles = repositoryContext.UserRoleRepository.Get(testUser.UserId);
                Assert.IsEmpty(actualUserRoles);
            }
            finally
            {
                // delete test account
                TestDataCleaner.DeleteTestAccount(repositoryContext, testAccount.AccountId);

                repositoryContext.Dispose();
            }
        }
        private IQuery GenerateInsertQuery(ICollection <uint> keys, IDatabaseTableData tableData)
        {
            if (keys.Count == 0)
            {
                return(Queries.Empty());
            }

            IMultiQuery query = Queries.BeginTransaction();

            query
            .Table(tableData.TableDefinition.TableName)
            .WhereIn(tableData.TableDefinition.TablePrimaryKeyColumnName, keys.Distinct())
            .Delete();

            if (tableData.Entities.Count == 0)
            {
                return(query.Close());
            }

            var columns = tableData.TableDefinition.TableColumns
                          .Select(c => c.Value)
                          .Where(col => !col.IsMetaColumn && !col.IsConditionColumn)
                          .ToList();

            HashSet <EntityKey> entityKeys = new();
            List <Dictionary <string, object?> > inserts = new(tableData.Entities.Count);
            List <string> duplicates = new List <string>();
            var           comparer   = new EntityComparer(tableData.TableDefinition);

            foreach (var entity in tableData.Entities.OrderBy(t => t, comparer))
            {
                bool duplicate = tableData.TableDefinition.PrimaryKey != null && !entityKeys.Add(new EntityKey(entity, tableData.TableDefinition));
                var  cells     = columns.ToDictionary(c => c.DbColumnName, c =>
                {
                    var cell = entity.GetCell(c.DbColumnName) !;
                    if (c.AutogenerateComment != null && cell is DatabaseField <string> sField)
                    {
                        var evaluator = new DatabaseExpressionEvaluator(calculatorService, parameterFactory, tableData.TableDefinition, c.AutogenerateComment !);
                        var comment   = evaluator.Evaluate(entity);
                        if (comment is string s)
                        {
                            return(s.AddComment(sField.Current.Value));
                        }
                    }
                    return(cell.Object);
                });

                if (duplicate)
                {
                    duplicates.Add("(" + string.Join(", ", cells.Values) + ")");
                }
                else
                {
                    inserts.Add(cells);
                }
            }

            query.Table(tableData.TableDefinition.TableName)
            .BulkInsert(inserts);

            if (duplicates.Count > 0)
            {
                query.Comment("duplicates, cannot insert:");
                foreach (var line in duplicates)
                {
                    query.Comment(line);
                }
            }

            query.Add(BuildConditions(keys, tableData));

            return(query.Close());
        }
Exemple #13
0
 /// <summary>
 /// Combine 2 entity comparers so that values will be sorted by <paramref name="first"/>
 /// fist, and <paramref name="second"/> second.
 /// </summary>
 /// <param name="first"></param>
 /// <param name="second"></param>
 public EntityComparer(EntityComparer first, EntityComparer second)
 {
     _parameters = new List <SortParameter>(first._parameters);
     _parameters.AddRange(second._parameters);
 }
Exemple #14
0
        private void LoadEntities()
        {
            _systemComparer = new Logic.SystemComparer(_sourceConnection, _targetConnection);

            WorkAsync(new WorkAsyncInfo
            {
                Message = "Getting Metadata",
                Work    = (worker, args) =>
                {
                    LogInfo("Start retrieving metadata on Source");
                    _systemComparer.RetrieveMetadata(ConnectionType.Source, _configuration.IncludeAttributeMetadata, worker.ReportProgress);
                    //_systemComparer.RetrieveOrganization(ConnectionType.Source, worker.ReportProgress);
                    _systemComparer.RetrieveForms(ConnectionType.Source, _configuration.IncludeForms, worker.ReportProgress);
                    _systemComparer.RetrieveViews(ConnectionType.Source, _configuration.IncludeViews, worker.ReportProgress);
                    LogInfo("Start retrieving metadata on Target");
                    _systemComparer.RetrieveMetadata(ConnectionType.Target, _configuration.IncludeAttributeMetadata, worker.ReportProgress);
                    //_systemComparer.RetrieveOrganization(ConnectionType.Target, worker.ReportProgress);
                    _systemComparer.RetrieveForms(ConnectionType.Target, _configuration.IncludeForms, worker.ReportProgress);
                    _systemComparer.RetrieveViews(ConnectionType.Target, _configuration.IncludeViews, worker.ReportProgress);

                    args.Result = _systemComparer;
                },
                PostWorkCallBack = (args) =>
                {
                    LogInfo("Postprocessing Metadata");
                    if (args.Error != null)
                    {
                        LogError(args.Error.ToString(), args);
                        MessageBox.Show(args.Error.ToString(), "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    }

                    var emds = (Logic.SystemComparer)args.Result;

                    comparisonListView.Items.Clear();

                    /*OrganizationComparer orgComparer = new OrganizationComparer();
                     * MetadataComparison orgComparison = null;
                     * orgComparison = orgComparer.Compare("Organization", emds._sourceCustomizationRoot.Organizations,
                     *  emds._targetCustomizationRoot.Organizations);*/



                    if (_configuration.IncludeViews)
                    {
                        EntityComparer viewComparer       = new EntityComparer();
                        MetadataComparison viewComparison = viewComparer.Compare("Views",
                                                                                 emds._sourceCustomizationRoot.Views,
                                                                                 emds._targetCustomizationRoot.Views);
                        AddItem(viewComparison, null);
                    }

                    if (_configuration.IncludeForms)
                    {
                        EntityComparer formComparer       = new EntityComparer();
                        MetadataComparison formComparison = formComparer.Compare("Forms",
                                                                                 emds._sourceCustomizationRoot.Forms,
                                                                                 emds._targetCustomizationRoot.Forms);
                        AddItem(formComparison, null);
                    }

                    MetadataComparer comparer     = new MetadataComparer();
                    MetadataComparison comparison = comparer.Compare("Entities",
                                                                     emds._sourceCustomizationRoot.EntitiesRaw,
                                                                     emds._targetCustomizationRoot.EntitiesRaw);
                    AddItem(comparison, null);
                },
                ProgressChanged = e => { SetWorkingMessage(e.UserState.ToString()); }
            });
        }
        /// <summary>
        /// Updates the resources.
        /// </summary>
        /// <param name="request">The request.</param>
        public static void UpdateResources(CalendarEventUpdateResourcesRequest request)
        {
            if (request == null)
                throw new ArgumentNullException("request");

            ListRequest listRequest = null;
            ListResponse listResponse = null;
            //Get the event primary key from target
            PrimaryKeyId eventId = request.Target.PrimaryKeyId.Value;
            //Возможные новые pk
            Dictionary<PrimaryKeyId, PrimaryKeyId> primaryKeyMap = null;

            List<ResourceActionWrapper> resourceActions = new List<ResourceActionWrapper>();
            //Determine update or create actions
            foreach (EntityObject entityObject in request.EntityObjects)
            {
                if(entityObject.MetaClassName == CalendarEventResourceEntity.ClassName)
                {
                    //Assign eventId properties
                    entityObject[CalendarEventResourceEntity.FieldEventId] = eventId;

                    listRequest = (ListRequest)EventHelper.ConstructRequest<ListRequest>(entityObject, false);
                    listRequest.Filters = ConstructFilterByEntity(entityObject);
                    listResponse =  (ListResponse)BusinessManager.Execute(listRequest);
                        //BusinessManager.List(entityObject.MetaClassName, ConstructFilterByEntity(entityObject));
                    if(listResponse.EntityObjects.Length != 0)
                    {
                        //Update disable
                        //foreach (EntityObject existEntity in listResponse.EntityObjects)
                        //{
                        //    entityObject.PrimaryKeyId = existEntity.PrimaryKeyId;
                        //    resourceActions.Add(new ResourceActionWrapper(entityObject, new UpdateRequest()));
                        //}
                    }
                    else
                    {
                        resourceActions.Add(new ResourceActionWrapper(entityObject, new CreateRequest()));
                    }
                }
            }
            //Determine delete action
            listRequest = (ListRequest)EventHelper.ConstructRequest<ListRequest>(new CalendarEventResourceEntity(), false);
            listRequest.Filters = new FilterElement[] { new FilterElement(CalendarEventResourceEntity.FieldEventId, FilterElementType.Equal, eventId) };
            listResponse = (ListResponse)BusinessManager.Execute(listRequest);
            foreach (CalendarEventResourceEntity resourceEntity in listResponse.EntityObjects)
            {
                EntityComparer entityComp = new EntityComparer(resourceEntity, CalendarEventResourceEntity.ComparedProperties);
                if(Array.Find<EntityObject>(request.EntityObjects, entityComp.CompareEntity) == null)
                {
                    resourceActions.Add(new ResourceActionWrapper(resourceEntity, new DeleteRequest()));
                }
            }
            //Пытаемся разбить event на exception
            if(resourceActions.Count != 0)
            {
                bool exceptionCreated;
                primaryKeyMap = EventHelper.PrepareChangeData((VirtualEventId)eventId, out exceptionCreated);
            }
            //Execute action
            foreach (ResourceActionWrapper resourceAction in resourceActions)
            {
                //получаем возможно новый pk event
                eventId = EventHelper.FindDestiantionId(primaryKeyMap, eventId);
                //получаем возможно новый pk resource
                if (resourceAction.ResourceEntity.PrimaryKeyId != null)
                {
                    resourceAction.ResourceEntity.PrimaryKeyId = EventHelper.FindDestiantionId(primaryKeyMap,
                                                                                               resourceAction.ResourceEntity.PrimaryKeyId.Value);
                }
                //записываем возможно изменившийся pk event-a
                resourceAction.ResourceEntity[CalendarEventResourceEntity.FieldEventId] = eventId;
                //вызываем запросы на модификацию
                BusinessManager.Execute(resourceAction.ResourceActionRequest);
            }
        }
Exemple #16
0
        public override void OnActionExecuting(ActionExecutingContext filterContext)
        {
            //Stores the Request in an Accessible object
            var    request = filterContext.HttpContext.Request;
            string entity  = filterContext.ActionDescriptor.ControllerDescriptor.ControllerName;
            var    RecdId  = 0;

            if (filterContext.ActionParameters.First().Key.ToUpper() == "ID")
            {
                RecdId = Convert.ToInt32(filterContext.ActionParameters.First().Value);
            }
            //Generate an audit
            JournalEntry audit = new JournalEntry()
            {
                UserName        = (request.IsAuthenticated) ? filterContext.HttpContext.User.Identity.Name : "Anonymous",
                RoleName        = (request.IsAuthenticated) ?string.Join(",", ((CustomPrincipal)filterContext.HttpContext.User).userroles) : "Anonymous",
                EntityName      = entity,
                RecordInfo      = "<a href=\"" + request.RawUrl.Replace("RenderPartial=True&", "").Replace("EditQuick", "Edit") + "\">" + (RecdId > 0 ? EntityComparer.GetDisplayValueForAssociation(entity, Convert.ToString(RecdId)) : "Click to view") + "</a>",
                DateTimeOfEntry = DateTime.UtcNow,
                RecordId        = RecdId,
                Type            = string.IsNullOrEmpty(name) ? filterContext.ActionDescriptor.ActionName : name
            };
            //Stores the Audit in the Database
            JournalEntryContext context = new JournalEntryContext();

            context.JournalEntries.Add(audit);
            context.SaveChanges();
            //Finishes executing the Action as normal
            base.OnActionExecuting(filterContext);
        }