Exemple #1
0
        public static RetainerData ToDb(this RetainerInfoItem item, long characterId, int world)
        {
            var result = new RetainerData();
            {
                result.RetainerId = item.RetainerId;
                result.RetainerName = item.RetainerName;
                result.Character = characterId;
                result.Location = item.RetainerLocation;
                result.World = world;
            }

            return result;
        }
        public RetainerData Commit(long accountId, RetainerData data, bool saveChange)
        {
            if (data == null)
            {
                throw new InvalidOperationException();
            }

            if (data.RetainerId <= 0)
            {
                throw new InvalidOperationException();
            }

            var source = _context.RetainerData.SingleOrDefault(x => x.RetainerId == data.RetainerId);
            var update = false;

            if (source != null)
            {
                if (data.RetainerName != null && data.RetainerName != source.RetainerName)
                {
                    _context.DataLog.Add(new DataLog
                    {
                        FromValue   = source.RetainerName,
                        ToValue     = data.RetainerName,
                        Operator    = accountId,
                        RecordId    = source.RetainerId,
                        TableColumn = GlobalOperation.COLUMN_RETAINER_NAME,
                        ReportTime  = _time.UtcNow
                    });

                    source.RetainerName = data.RetainerName;

                    update = true;
                }

                if (data.Character != 0 && data.Character != source.Character)
                {
                    _context.DataLog.Add(new DataLog
                    {
                        FromValue   = source.Character.ToString(),
                        ToValue     = data.Character.ToString(),
                        Operator    = accountId,
                        RecordId    = source.RetainerId,
                        TableColumn = GlobalOperation.COLUMN_RETAINER_CHARA,
                        ReportTime  = _time.UtcNow
                    });

                    source.Character = data.Character;

                    update = true;
                }

                if (data.World != 0 && data.World != source.World)
                {
                    _context.DataLog.Add(new DataLog
                    {
                        FromValue   = source.World.ToString(),
                        ToValue     = data.World.ToString(),
                        Operator    = accountId,
                        RecordId    = source.RetainerId,
                        TableColumn = GlobalOperation.COLUMN_RETAINER_WORLD,
                        ReportTime  = _time.UtcNow
                    });

                    source.World = data.World;

                    update = true;
                }

                if (data.Location != 0 && data.Location != source.Location)
                {
                    _context.DataLog.Add(new DataLog
                    {
                        FromValue   = source.Location.ToString(),
                        ToValue     = data.Location.ToString(),
                        Operator    = accountId,
                        RecordId    = source.RetainerId,
                        TableColumn = GlobalOperation.COLUMN_RETAINER_LOCATION,
                        ReportTime  = _time.UtcNow
                    });

                    source.Location = data.Location;

                    update = true;
                }

                if (data.Inventory != null)
                {
                    source.Inventory = data.Inventory;

                    update = true;
                }

                _context.RetainerData.Update(source);
            }

            else
            {
                //source = _context.RetainerData.CreateProxy();
                source = new RetainerData();
                {
                    source.RetainerId   = data.RetainerId;
                    source.RetainerName = data.RetainerName;
                    source.Character    = data.Character;
                    source.Inventory    = data.Inventory;
                    source.World        = data.World;
                    source.Location     = data.Location;
                }

                _context.RetainerData.Add(source);

                _context.SaveChanges();

                _context.DataLog.Add(new DataLog
                {
                    FromValue   = null,
                    ToValue     = "INITIAL COMMIT",
                    Operator    = accountId,
                    RecordId    = source.RetainerId,
                    TableColumn = GlobalOperation.COLUMN_RETAINER_NEW,
                    ReportTime  = _time.UtcNow
                });

                update = true;
            }

            if (update && saveChange)
            {
                _context.SaveChanges();
            }

            return(source);
        }