private long CreateSelf(IRecord values) { Debug.Assert(values != null); if (this.ContainsField(VersionFieldName) && !values.ContainsKey(VersionFieldName)) { values.Add(VersionFieldName, 0); } var allColumnNames = from f in values.Keys let fieldInfo = this.Fields[f] where fieldInfo.IsColumn && fieldInfo.Name != IdFieldName select f; var colValues = new object[allColumnNames.Count()]; var sql = this.BuildInsertStatement(values, allColumnNames, colValues); var rows = this.DbDomain.CurrentSession.DataContext.Execute(sql, colValues); if (rows != 1) { var msg = string.Format("Failed to insert row, SQL: {0}", sql); throw new SlipStream.Exceptions.DataException(msg); } return(this.DbDomain.CurrentSession.DataContext.GetLastIdentity(this.TableName)); }