private Int64 Insert(Mapping.Table table, Object item, Int32?commandTimeout = null) { ExecuteNonQuery(table.ToSqlInsert(Factory.Dialect, Factory.Mapping.Catalog, Factory.Mapping.Schema), item, commandTimeout); Int64 r = 0; Mapping.Column idCol = table.IdColumn; if (idCol != null && Factory.Dialect.SelectIdentityString != null) { r = Enumerable.FirstOrDefault <Int64>(Query <Int64>(Factory.Dialect.SelectIdentityString, null, false, commandTimeout)); if (idCol.MemberInfo != null && table.EntityType != null && table.EntityType.IsInstanceOfType(item)) { Object val = Convert.ChangeType(r, idCol.MemberInfo.Property.PropertyType); if (idCol.MemberInfo.Property != null) { idCol.MemberInfo.Property.SetValue(item, val, null); } else if (idCol.MemberInfo.Field != null) { idCol.MemberInfo.Field.SetValue(item, val); } } } return(r); }
public String ToSqlString(FieldExpression field) { Mapping.Column column = _table.FindColumnByFieldName(field.Filed); if (column == null) { return(field.ToString()); } else { return(column.GetQuotedName(_factory.Dialect)); } }
static Func <IDataReader, Object> GetObjectDeserializer(Type type, IConnectionFactorySupport factory) { return(delegate(IDataReader reader) { Object obj = null; var fieldCount = reader.FieldCount; if (type.IsPrimitive) { // If the type is a primitive type, takes only the first column as the result. if (fieldCount > 0) { obj = Convert.ChangeType(reader.GetValue(0), type); } } else { Mapping.Table table = factory.Mapping.FindTable(type); obj = Activator.CreateInstance(type); for (var i = 0; i < fieldCount; i++) { var tmp = reader.GetValue(i); if (tmp == DBNull.Value) { continue; } Mapping.Column column = table.FindColumnByColumnName(reader.GetName(i)); if (column != null) { PropertyInfo pi = (column.MemberInfo == null || column.MemberInfo.Property == null) ? type.GetProperty(column.FieldName) : column.MemberInfo.Property; pi.SetValue(obj, System.Convert.ChangeType(tmp, pi.PropertyType), null); } } } return obj; }); }