コード例 #1
0
ファイル: UsersController.cs プロジェクト: dalangobeni/cnds
        public async Task <UserDTO> Register(UserTransferDTO dto)
        {
            NetworkEntity userEntity = DataContext.NetworkEntities.Add(new NetworkEntity {
                NetworkID = dto.NetworkID, NetworkEntityID = dto.ID, EntityType = EntityType.User
            });

            Data.User user = DataContext.Users.Add(new Data.User()
            {
                ID             = userEntity.ID,
                UserName       = dto.UserName,
                FirstName      = dto.FirstName,
                LastName       = dto.LastName,
                MiddleName     = dto.MiddleName,
                PhoneNumber    = dto.PhoneNumber,
                FaxNumber      = dto.FaxNumber,
                EmailAddress   = dto.EmailAddress,
                NetworkID      = dto.NetworkID,
                OrganizationID = dto.OrganizationID,
                Salutation     = dto.Salutation,
            });

            await DataContext.SaveChangesAsync();

            if (dto.Metadata != null && dto.Metadata.Count() > 0)
            {
                IList <Data.UserDomainData> metadata = new List <Data.UserDomainData>();
                foreach (var meta in dto.Metadata)
                {
                    var orgMeta = new UserDomainData()
                    {
                        UserID         = user.ID,
                        DomainUseID    = meta.DomainUseID,
                        Value          = meta.Value,
                        SequenceNumber = meta.SequenceNumber,
                    };
                    if (meta.DomainReferenceID.HasValue)
                    {
                        orgMeta.DomainReferenceID = meta.DomainReferenceID.Value;
                    }
                    metadata.Add(orgMeta);
                }
                if (metadata.Count > 0)
                {
                    DataContext.DomainDatas.AddRange(metadata);
                }
                await DataContext.SaveChangesAsync();
            }

            return(user.Map <User, UserDTO>());
        }
コード例 #2
0
ファイル: UsersController.cs プロジェクト: dalangobeni/cnds
        public async Task <UserDTO> Update(UserTransferDTO dto)
        {
            var user = await DataContext.Users.FindAsync(dto.ID);

            if (user.Deleted)
            {
                throw new Exception("The specified User was no found");
            }

            user.UserName     = dto.UserName;
            user.FirstName    = dto.FirstName;
            user.LastName     = dto.LastName;
            user.MiddleName   = dto.MiddleName;
            user.PhoneNumber  = dto.PhoneNumber;
            user.FaxNumber    = dto.FaxNumber;
            user.EmailAddress = dto.EmailAddress;
            user.Salutation   = dto.Salutation;
            user.Active       = dto.Active;

            await DataContext.SaveChangesAsync();

            var userMetadata = await DataContext.DomainDatas.OfType <UserDomainData>().Where(x => x.UserID == dto.ID).ToArrayAsync();

            if (dto.Metadata != null && dto.Metadata.Count() > 0)
            {
                IList <UserDomainData> metaDataToAdd = new List <UserDomainData>();
                foreach (var meta in dto.Metadata.Where(m => !m.ID.HasValue))
                {
                    var userMeta = new UserDomainData()
                    {
                        UserID         = dto.ID,
                        DomainUseID    = meta.DomainUseID,
                        Value          = meta.Value,
                        SequenceNumber = meta.SequenceNumber,
                    };
                    if (meta.DomainReferenceID.HasValue)
                    {
                        userMeta.DomainReferenceID = meta.DomainReferenceID.Value;
                    }
                    metaDataToAdd.Add(userMeta);
                }
                if (metaDataToAdd.Count > 0)
                {
                    DataContext.DomainDatas.AddRange(metaDataToAdd);
                }

                foreach (var meta in userMetadata.Where(org => dto.Metadata.Any(m => m.ID == org.ID && (org.Value != m.Value || org.SequenceNumber != m.SequenceNumber || org.DomainReferenceID != m.DomainReferenceID))))
                {
                    var diff = dto.Metadata.Where(m => m.ID == meta.ID).FirstOrDefault();
                    DataContext.DomainDatas.Attach(meta);
                    if (meta.Value != diff.Value)
                    {
                        meta.Value = diff.Value;
                    }
                    if (meta.SequenceNumber != diff.SequenceNumber)
                    {
                        meta.SequenceNumber = diff.SequenceNumber;
                    }
                    if (meta.DomainReferenceID != diff.DomainReferenceID)
                    {
                        meta.DomainReferenceID = diff.DomainReferenceID;
                    }
                }
                await DataContext.SaveChangesAsync();
            }
            var metadataIDs = dto.Metadata.Where(x => x.ID.HasValue).Select(x => x.ID.Value);
            var remove      = (from d in userMetadata
                               where !metadataIDs.Contains(d.ID) && d.UserID == dto.ID
                               select d.ID).ToArray();


            if (remove.Count() > 0)
            {
                //Have to do this cause of trigger
                var removeIDs = String.Join(",", remove.Select(x => String.Format("'{0}'", x)));
                await DataContext.Database.ExecuteSqlCommandAsync(string.Format("delete from UserDomainData where ID IN ({0})", removeIDs));
            }

            return(user.Map <User, UserDTO>());
        }