예제 #1
0
        public object Create(Entity entity)
        {
            var existingItem = GetEntity(entity, entity.Key.Value);

            if (existingItem != null)
            {
                Error(IlaroAdminResources.EntityAlreadyExist);
                return(null);
            }

            FileHandle(entity);

            var table = new DynamicModel(AdminInitialise.ConnectionString, tableName: entity.TableName, primaryKeyField: entity.Key.ColumnName);

            var expando = new ExpandoObject();
            var filler  = expando as IDictionary <String, object>;

            foreach (var property in entity.CreateProperties(getForeignCollection: false))
            {
                filler[property.ColumnName] = property.Value;
            }
            var cmd = table.CreateInsertCommand(expando);

            cmd.CommandText += Environment.NewLine + ";DECLARE @newID int; SELECT @newID = SCOPE_IDENTITY()";
            foreach (var property in entity.Properties.Where(x => x.IsForeignKey && x.IsCollection && !x.Values.IsNullOrEmpty()))
            {
                // UPDATE {TableName} SET {ForeignKey} = {FKValue} WHERE {PrimaryKey} In ({PKValues});
                var updateFormat = Environment.NewLine + ";UPDATE {0} SET {1} = @newID WHERE {2} In ({3})";
                cmd.CommandText += string.Format(updateFormat, property.ForeignEntity.TableName, entity.Key.ColumnName, property.ForeignEntity.Key.ColumnName, DecorateSqlValue(property.Values, property.ForeignEntity.Key));
            }
            cmd.CommandText += Environment.NewLine + ";SELECT @newID";

            FixParamsSqlType(entity, cmd, filler);

            var item = table.Execute(cmd);

            AddEntityChange(entity.Name, item.ToString(), EntityChangeType.Insert);

            ClearProperties(entity);

            return(item);
        }