コード例 #1
0
        public object Load(IDataMapper db, object parent)
        {
            TParent tParent = (TParent)parent;

            if (Condition != null && !Condition(tParent))
            {
                return(null);
            }
            else
            {
                if (_relationshipType == RelationshipTypes.One)
                {
                    // Parent FK = Child PK
                    if (_childColumns.PrimaryKeys.Count != 1)
                    {
                        throw new DataMappingException(string.Format("'{0}' must have exactly one primary key mapped.", typeof(TChild).Name));
                    }

                    var childPK = _childColumns.PrimaryKeys[0];

                    var parentFK = _parentColumns.GetByFieldName(_fk);
                    if (parentFK == null)
                    {
                        throw new DataMappingException(string.Format("'{0}' does not contain foreign key field '{1}'.", typeof(TParent), _fk));
                    }

                    db.AddParameter("@FK", parentFK.Getter(parent));
                    var    query       = db.Query <TChild>();
                    string whereClause = query.BuildColumnName(childPK.ColumnInfo.Name) + "=@FK";
                    return(query.Where(whereClause).FirstOrDefault());
                }
                else if (_relationshipType == RelationshipTypes.Many)
                {
                    // Parent PK = Child FK
                    if (_parentColumns.PrimaryKeys.Count != 1)
                    {
                        throw new DataMappingException(string.Format("'{0}' must have exactly one primary key mapped.", typeof(TParent).Name));
                    }

                    var parentPK = _parentColumns.PrimaryKeys[0];

                    var childFK = _childColumns.GetByFieldName(_fk);
                    if (childFK == null)
                    {
                        throw new DataMappingException(string.Format("'{0}' does not contain foreign key field '{1}'.", typeof(TChild), _fk));
                    }

                    db.AddParameter("@PK", parentPK.Getter(parent));
                    var    query       = db.Query <TChild>();
                    string whereClause = query.BuildColumnName(childFK.ColumnInfo.Name) + "=@PK";
                    return(query.Where(whereClause).ToList());
                }
                else
                {
                    // This should not happen because relationship type should be inferred already
                    throw new DataMappingException(string.Format("Unable to infer relationship type for parent '{0}' -> '{1}'.",
                                                                 typeof(TParent).Name, typeof(TChild).Name));
                }
            }
        }
コード例 #2
0
        public void AddParameter_Should_Use_Registered_IConverter()
        {
            // Arrange
            IDataMapper db        = CreateDataMapper();
            DbParameter parameter = MockRepository.GenerateStub <DbParameter>();

            _command
            .Expect(c => c.CreateParameter())
            .Return(parameter);

            DbParameterCollection parameters = MockRepository.GenerateStub <DbParameterCollection>();

            // Register a BooleanYNConverter
            MapRepository.Instance.RegisterTypeConverter(typeof(bool), new Converters.BooleanYNConverter());

            _command
            .Expect(c => c.Parameters)
            .Return(parameters);

            // Act
            ParameterChainMethods paramChain = db.AddParameter("Flag", true);

            // Assert
            Assert.AreEqual("Flag", paramChain.Parameter.ParameterName);
            Assert.AreEqual("Y", paramChain.Parameter.Value);
        }
コード例 #3
0
        public void AddParameter_When_Enum_Converter_Is_Registered_Should_Use_For_Any_Enums()
        {
            // Arrange
            IDataMapper db        = CreateDataMapper();
            DbParameter parameter = MockRepository.GenerateStub <DbParameter>();

            _command
            .Expect(c => c.CreateParameter())
            .Return(parameter);

            DbParameterCollection parameters = MockRepository.GenerateStub <DbParameterCollection>();

            _command
            .Expect(c => c.Parameters)
            .Return(parameters);

            // Register a BooleanYNConverter
            MapRepository.Instance.RegisterTypeConverter(typeof(Enum), new Converters.EnumStringConverter());

            // Act
            ParameterChainMethods paramChain = db.AddParameter("GenderType", GenderType.Male);

            // Assert
            Assert.AreEqual("Male", paramChain.Parameter.Value);
            Assert.IsInstanceOfType(paramChain.Parameter.Value, typeof(string));
        }
コード例 #4
0
        public void AddParameter_When_No_IConverter_Is_Registered_Should_Use_Assign_Straight_Value()
        {
            // Arrange
            IDataMapper db        = CreateDataMapper();
            DbParameter parameter = MockRepository.GenerateStub <DbParameter>();

            _command
            .Expect(c => c.CreateParameter())
            .Return(parameter);

            DbParameterCollection parameters = MockRepository.GenerateStub <DbParameterCollection>();

            _command
            .Expect(c => c.Parameters)
            .Return(parameters);

            // Act
            ParameterChainMethods paramChain = db.AddParameter("Flag", true);

            // Assert
            Assert.AreEqual("Flag", paramChain.Parameter.ParameterName);
            Assert.AreEqual(true, paramChain.Parameter.Value);
        }
コード例 #5
0
        public void AddParameter_Null_Should_Convert_To_DBNull_Value()
        {
            // Arrange
            IDataMapper db        = CreateDataMapper();
            DbParameter parameter = MockRepository.GenerateStub <DbParameter>();

            _command
            .Expect(c => c.CreateParameter())
            .Return(parameter);

            DbParameterCollection parameters = MockRepository.GenerateStub <DbParameterCollection>();

            _command
            .Expect(c => c.Parameters)
            .Return(parameters);

            // Act
            ParameterChainMethods paramChain = db.AddParameter("Test", null);

            // Assert
            Assert.AreEqual("Test", paramChain.Parameter.ParameterName);
            Assert.AreEqual(DBNull.Value, paramChain.Parameter.Value);
        }