Пример #1
0
        public virtual TEntity GetOne(ICondition filter, IOrderByExpression order_by)
        {
            var select = GetSelectStatement(filter, order_by);

            var     reader = select.ExecuteReader();
            TEntity entity = default(TEntity);

            if (reader.Read())
            {
                entity = ReadEntity(reader);
            }

            reader.Close();

            if (entity == null)
            {
                return(default(TEntity));
            }

            if (_associations.Count() > 0)
            {
                foreach (IAssociationMapping _association in _associations)
                {
                    var amapping = MappingFactory.GetMapping(_association.OtherMappingType);

                    object val = entity[_association.ThisKeys[0]];
                    if (val == null)
                    {
                        continue;
                    }

                    int colCount = amapping.Columns.Count;
                    var select2  = SqlUtils.CreateSelectStatement(amapping);
                    select2.ConnectionStringName = select.ConnectionStringName;

                    select2.Where(Condition.IsEqual(_association.OtherKeys[0], new SqlNumber((int)val)));
                    var values  = new Dictionary <string, object>();
                    var reader2 = select2.ExecuteReader();
                    if (reader2.Read())
                    {
                        if (entity[_association.Name] == null)
                        {
                            entity[_association.Name] = Activator.CreateInstance(entity.GetProperty(_association.Name).PropertyType, (int)val);
                        }

                        Entity _prop = entity[_association.Name] as Entity;

                        for (int f = 0; f < reader2.FieldCount; f++)
                        {
                            _prop[reader2.GetName(f)] = reader2.GetValue(f);
                        }
                    }
                    reader2.Close();
                }
            }

            if (_hasManyAssociations.Count() == 0)
            {
                return(entity);
            }

            foreach (IAssociationMapping hma in _hasManyAssociations)
            {
                var omapping = MappingFactory.GetMapping(hma.OtherMappingType);
                int colCount = omapping.Columns.Count;
                var select2  = SqlUtils.CreateSelectStatement(omapping);
                select2.ConnectionStringName = select.ConnectionStringName;

                ICondition idCriteria = IdentityInsert
                    ? Conditions.IsEqual(hma.OtherKeys[0], new SqlNumber(entity.Id.ToString()))
                    : Conditions.IsEqual(hma.OtherKeys[0], new SqlString(entity.Id.ToString()));

                select2.Where(idCriteria);

                var reader2 = select2.ExecuteReader();
                while (reader2.Read())
                {
                    var values = new Dictionary <string, object>();
                    for (int f = 0; f < reader2.FieldCount; f++)
                    {
                        values.Add(reader2.GetName(f), reader2.GetValue(f));
                    }

                    entity.AddValueObject(hma.Name, values);
                }
                reader2.Close();
            }

            return(entity);
        }