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); }