Class FromTypeRowMapper<TFrom>
Defines mappings from the (potentially hierarchical) fields, properties, table columns etc. of a source 'from' .NET CLR type (described by FromRowSchema), to a flat list of user supplied or automatically generated target 'to' columns (described by ToRowSchema).
This facility is commonly used by dataflow workers for copying and renaming column data between input fields and properties on the one hand, and external data sources on the other hand.
Members to be mapped can be specified explicitly via name or index (e.g. copy from
input column "A" to the fourth output column), as well as implicitly based on name (i.e.
AutoName()
). A specified field or property on the 'from' side can reside inside a
column schema, i.e. a struct
that groups multiple fields and properties.
This class does include the Row() method, also see IColumnMapperCommand which excludes that method.
Mappings can be specified with the rowMapperCommandAction
parameter, or added by calling
the mapping methods Name(String) etc. The mapping result is available in
Mappings, which the caller can use to manually perform any tasks, such as
copy columns.
Also see the Dataflow Column Mapping and Mapping and Copying examples, as well as IRowMapperCommand and IColumnMapperCommand.
Note: If the mapping commands result in duplicate mappings, an exception will be thrown. Resolve this by either of:
- Specify additional or all name parts in explicit mapping
- Change the column (or schema) names in the from and/or to rows to avoid name clashes
- Restrict auto-mapping to specific column schemas
- Map offending columns explicitly by name (which will exclude them from later auto-mappings)
Namespace: actionETL
Assembly: actionETL.dll
Syntax
public class FromTypeRowMapper<TFrom> : IRowMapperCommand, IFluentInterface
Type Parameters
Name | Description |
---|---|
TFrom | The source 'from' type. |
Constructors
FromTypeRowMapper(Action<IRowMapperCommand>)
Initializes a new instance of the FromTypeColumnMapper<TFrom> class, which defines mappings between the fields, properties, table columns etc. of a source 'from' .NET CLR type, to a set of target 'to' column names, automatically created from all source 'from' column names.
Column name matching is ordinal case insensitive, but a case sensitive match takes precedence over a case insensitive match.
Also see the Dataflow Column Mapping and Mapping and Copying examples, as well as IRowMapperCommand and IColumnMapperCommand.
Declaration
public FromTypeRowMapper(Action<IRowMapperCommand> rowMapperCommandAction)
Parameters
Type | Name | Description |
---|---|---|
Action<IRowMapperCommand> | rowMapperCommandAction | An action that executes commands that define the column mappings, e.g. mapping two columns using from-name and to-index:
Set to |
FromTypeRowMapper(IEnumerable<String>, Action<IRowMapperCommand>)
Initializes a new instance of the FromTypeColumnMapper<TFrom> class, which defines mappings between the fields, properties, table columns etc. of a source 'from' .NET CLR type, to a set of user supplied target 'to' columns.
Column name matching is ordinal case insensitive, but a case sensitive match takes precedence over a case insensitive match.
Also see the Dataflow Column Mapping and Mapping and Copying examples, as well as IRowMapperCommand and IColumnMapperCommand.
Declaration
public FromTypeRowMapper(IEnumerable<string> toColumnNames, Action<IRowMapperCommand> rowMapperCommandAction)
Parameters
Type | Name | Description |
---|---|---|
IEnumerable<String> | toColumnNames | Target 'to' column names. |
Action<IRowMapperCommand> | rowMapperCommandAction | An action that executes commands that define the column mappings, e.g. mapping two columns by name:
Set to |
Properties
Mappings
Gets the mapper result. It provides the mappings as well as type and other information about the 'from' and 'to' sides.
Declaration
public FromTypeColumnMappings Mappings { get; }
Property Value
Type | Description |
---|---|
FromTypeColumnMappings |
Methods
AutoName()
Map automatically by name. Identical names will match, as will partial names where one or more of the
left-most parts of the name have been left out. E.g., "Person.Name.FirstName"
would automatically
map to either of "FirstName"
and "Name.FirstName"
. More matching parts take precedence over
fewer matching parts.
Column name matching is ordinal case insensitive, but a case sensitive match takes precedence over a case insensitive match.
The mapping only considers readable (see CanRead) 'from' columns.
Note: If there are still more than one possible mapping, an exception will be thrown. Resolve this by either of:
- Change the column names in the row(s) to avoid name clashes
- Use one of the overloads that allows restricting the auto-mapping to specific hierarchy names
- Map offending columns individually by name (which will exclude them from later mappings), before calling this auto-mapping method
Declaration
public IRowMapperCommand AutoName()
Returns
Type | Description |
---|---|
IRowMapperCommand | The |
Exceptions
Type | Condition |
---|---|
InvalidOperationException |
|
AutoName(Int32)
Map automatically by name. Identical names will match, as will partial names where one or more of the
left-most parts of the name have been left out. E.g., "Person.Name.FirstName"
would automatically
map to either of "FirstName"
and "Name.FirstName"
. More matching parts take precedence over
fewer matching parts.
Column name matching is ordinal case insensitive, but a case sensitive match takes precedence over a case insensitive match.
The mapping only considers readable (see CanRead) 'from' columns.
Note: If there are still more than one possible mapping, an exception will be thrown. Resolve this by either of:
- Change the column names in the row(s) to avoid name clashes
- Use one of the overloads that allows restricting the auto-mapping to specific hierarchy names
- Map offending columns individually by name (which will exclude them from later mappings), before calling this auto-mapping method
Declaration
public IRowMapperCommand AutoName(int assertNumberOfMatches)
Parameters
Type | Name | Description |
---|---|---|
Int32 | assertNumberOfMatches | Assert number of matches. |
Returns
Type | Description |
---|---|
IRowMapperCommand | The |
Exceptions
Type | Condition |
---|---|
InvalidOperationException |
|
AutoName(Int32, String, String)
Map automatically by name. Identical names will match, as will partial names where one or more of the
left-most parts of the name have been left out. E.g., "Person.Name.FirstName"
would automatically
map to either of "FirstName"
and "Name.FirstName"
. More matching parts take precedence over
fewer matching parts.
Column name matching is ordinal case insensitive, but a case sensitive match takes precedence over a case insensitive match.
The mapping only considers readable (see CanRead) 'from' columns.
Note: If there are still more than one possible mapping, an exception will be thrown. Resolve this by either of:
- Change the column names in the row(s) to avoid name clashes
- Restrict the auto-mapping to specific hierarchy names
- Map offending columns individually by name (which will exclude them from later mappings), before calling this auto-mapping method
Declaration
public IRowMapperCommand AutoName(int assertNumberOfMatches, string fromHierarchyName, string toHierarchyName)
Parameters
Type | Name | Description |
---|---|---|
Int32 | assertNumberOfMatches | Assert number of matches. |
String | fromHierarchyName | Hierarchy from name to include, or |
String | toHierarchyName | Hierarchy to name to include, or |
Returns
Type | Description |
---|---|
IRowMapperCommand | The |
Exceptions
Type | Condition |
---|---|
InvalidOperationException |
|
AutoName(String, String)
Map automatically by name. Identical names will match, as will partial names where one or more of the
left-most parts of the name have been left out. E.g., "Person.Name.FirstName"
would automatically
map to either of "FirstName"
and "Name.FirstName"
. More matching parts take precedence over
fewer matching parts.
Column name matching is ordinal case insensitive, but a case sensitive match takes precedence over a case insensitive match.
The mapping only considers readable (see CanRead) 'from' columns.
Note: If there are still more than one possible mapping, an exception will be thrown. Resolve this by either of:
- Change the column names in the row(s) to avoid name clashes
- Restrict the auto-mapping to specific hierarchy names
- Map offending columns individually by name (which will exclude them from later mappings), before calling this auto-mapping method
Declaration
public IRowMapperCommand AutoName(string fromHierarchyName, string toHierarchyName)
Parameters
Type | Name | Description |
---|---|---|
String | fromHierarchyName | Hierarchy from name to include, or |
String | toHierarchyName | Hierarchy to name to include, or |
Returns
Type | Description |
---|---|
IRowMapperCommand | The |
Exceptions
Type | Condition |
---|---|
InvalidOperationException |
|
Index(Int32, Int32)
Map a 'from' column to a 'to' column based on their index in SchemaNodeList.
Declaration
public IRowMapperCommand Index(int fromSchemaNodeListIndex, int toSchemaNodeListIndex)
Parameters
Type | Name | Description |
---|---|---|
Int32 | fromSchemaNodeListIndex | From index. |
Int32 | toSchemaNodeListIndex | To index. |
Returns
Type | Description |
---|---|
IRowMapperCommand | The |
Exceptions
Type | Condition |
---|---|
ArgumentOutOfRangeException |
|
InvalidOperationException |
|
Name(String)
Map a 'from' column to a 'to' column based on their names.
Column name matching is ordinal case insensitive, but a case sensitive match takes precedence over a case insensitive match.
Declaration
public IRowMapperCommand Name(string schemaNodeName)
Parameters
Type | Name | Description |
---|---|---|
String | schemaNodeName | Name of both the 'from' and 'to' columns. Column schema names can optionally be omitted from the left, as long as the specified name is unique among all columns in the row. E.g., assuming "FirstName" is unique, the following can all identify the same column:
|
Returns
Type | Description |
---|---|
IRowMapperCommand | The |
Exceptions
Type | Condition |
---|---|
InvalidOperationException |
|
ArgumentNullException |
|
Name(String, String)
Map a 'from' column to a 'to' column based on their names.
Column name matching is ordinal case insensitive, but a case sensitive match takes precedence over a case insensitive match.
Declaration
public IRowMapperCommand Name(string fromSchemaNodeName, string toSchemaNodeName)
Parameters
Type | Name | Description |
---|---|---|
String | fromSchemaNodeName | Name of the 'from' column. Column schema names can optionally be omitted from the left, as long as the specified name is unique among all columns in the row. E.g., assuming "FirstName" is unique, the following can all identify the same column:
|
String | toSchemaNodeName | Name of the 'to' column. Column schema names can optionally be omitted from the left, as long as the specified name is unique among all columns in the row. E.g., assuming "FirstName" is unique, the following can all identify the same column:
|
Returns
Type | Description |
---|---|
IRowMapperCommand | The |
Exceptions
Type | Condition |
---|---|
InvalidOperationException |
|
ArgumentNullException |
|
Row()
Map the whole row. Mutually exclusive with commands mapping individual columns. It is up to the caller to decide how to react to a whole row mapping.
Declaration
public IRowMapperCommand Row()
Returns
Type | Description |
---|---|
IRowMapperCommand |
Exceptions
Type | Condition |
---|---|
InvalidOperationException | Mapping the row as a single unit is mutually exclusive with commands mapping individual columns |