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)); } } }
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); }
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)); }
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); }
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); }