Ejemplo n.º 1
0
        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);
        }
Ejemplo n.º 2
0
 public String ToSqlString(FieldExpression field)
 {
     Mapping.Column column = _table.FindColumnByFieldName(field.Filed);
     if (column == null)
     {
         return(field.ToString());
     }
     else
     {
         return(column.GetQuotedName(_factory.Dialect));
     }
 }
Ejemplo n.º 3
0
        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;
            });
        }