@@ -13,19 +13,23 @@ namespace PostgreSQLCopyHelper.Test.Issues
1313 [ TestFixture ]
1414 public class Issue75_CompositeTypes_Test : TransactionalTestBase
1515 {
16+ private class SampleEntity
17+ {
18+ public string TextColumn { get ; set ; }
19+
20+ public PersonType CompositeTypeColumn { get ; set ; }
21+ }
22+
1623 private class PersonType
1724 {
18- [ PgName ( "first_name" ) ]
1925 public string FirstName { get ; set ; }
2026
21- [ PgName ( "last_name" ) ]
2227 public string LastName { get ; set ; }
2328
24- [ PgName ( "birth_date" ) ]
2529 public DateTime BirthDate { get ; set ; }
2630 }
2731
28- private PostgreSQLCopyHelper < PersonType > subject ;
32+ private PostgreSQLCopyHelper < SampleEntity > subject ;
2933
3034 protected override void OnSetupInTransaction ( )
3135 {
@@ -45,31 +49,49 @@ public void Test_CompositeBulkInsert()
4549
4650 connection . TypeMapper . MapComposite < PersonType > ( "sample.person_type" ) ;
4751
48- subject = new PostgreSQLCopyHelper < PersonType > ( "sample" , "CompositeTest" )
49- . Map ( "col_person" , x => x ) ;
52+ // ... alternatively you can set it globally at any place in your application using the NpgsqlConnection.GlobalTypeMapper:
53+ //
54+ // NpgsqlConnection.GlobalTypeMapper.MapComposite<PersonType>("sample.person_type");
5055
51- var entities = new List < PersonType > ( ) ;
56+ subject = new PostgreSQLCopyHelper < SampleEntity > ( "sample" , "CompositeTest" )
57+ . MapText ( "col_text" , x => x . TextColumn )
58+ . Map ( "col_person" , x => x . CompositeTypeColumn ) ;
5259
53- entities . Add ( new PersonType { FirstName = "Philipp" , LastName = "Wagner" , BirthDate = new DateTime ( 1912 , 1 , 11 ) } ) ;
54- entities . Add ( new PersonType { FirstName = "Fake" , LastName = "Fakerton" , BirthDate = new DateTime ( 1987 , 1 , 11 ) } ) ;
60+ var entities = new List < SampleEntity > ( ) ;
61+
62+ entities . Add ( new SampleEntity
63+ {
64+ TextColumn = "0" ,
65+ CompositeTypeColumn = new PersonType { FirstName = "Fake" , LastName = "Fakerton" , BirthDate = new DateTime ( 1987 , 1 , 11 ) }
66+ } ) ;
67+
68+ entities . Add ( new SampleEntity
69+ {
70+ TextColumn = "1" ,
71+ CompositeTypeColumn = new PersonType { FirstName = "Philipp" , LastName = "Wagner" , BirthDate = new DateTime ( 1912 , 1 , 11 ) }
72+ } ) ;
5573
56- // Try to work with the Bulk Inserter:
5774 subject . SaveAll ( connection , entities ) ;
5875
59- var result = connection . GetAll ( "sample" , "CompositeTest" )
60- . Select ( x => ( PersonType ) x [ 0 ] )
61- . OrderBy ( x => x . FirstName )
76+ var result = connection . GetAll ( "SELECT col_text, col_person from sample.CompositeTest" )
77+ . Select ( x => new SampleEntity {
78+ TextColumn = ( string ) x [ 0 ] ,
79+ CompositeTypeColumn = ( PersonType ) x [ 1 ]
80+ } )
81+ . OrderBy ( x => x . TextColumn )
6282 . ToList ( ) ;
6383
6484 Assert . AreEqual ( 2 , result . Count ) ;
6585
66- Assert . AreEqual ( "Fake" , result [ 0 ] . FirstName ) ;
67- Assert . AreEqual ( "Fakerton" , result [ 0 ] . LastName ) ;
68- Assert . AreEqual ( new DateTime ( 1987 , 1 , 11 ) , result [ 0 ] . BirthDate ) ;
86+ Assert . AreEqual ( "0" , result [ 0 ] . TextColumn ) ;
87+ Assert . AreEqual ( "Fake" , result [ 0 ] . CompositeTypeColumn . FirstName ) ;
88+ Assert . AreEqual ( "Fakerton" , result [ 0 ] . CompositeTypeColumn . LastName ) ;
89+ Assert . AreEqual ( new DateTime ( 1987 , 1 , 11 ) , result [ 0 ] . CompositeTypeColumn . BirthDate ) ;
6990
70- Assert . AreEqual ( "Philipp" , result [ 1 ] . FirstName ) ;
71- Assert . AreEqual ( "Wagner" , result [ 1 ] . LastName ) ;
72- Assert . AreEqual ( new DateTime ( 1912 , 1 , 11 ) , result [ 1 ] . BirthDate ) ;
91+ Assert . AreEqual ( "1" , result [ 1 ] . TextColumn ) ;
92+ Assert . AreEqual ( "Philipp" , result [ 1 ] . CompositeTypeColumn . FirstName ) ;
93+ Assert . AreEqual ( "Wagner" , result [ 1 ] . CompositeTypeColumn . LastName ) ;
94+ Assert . AreEqual ( new DateTime ( 1912 , 1 , 11 ) , result [ 1 ] . CompositeTypeColumn . BirthDate ) ;
7395 }
7496
7597 private void CreateTableAndType ( )
@@ -89,6 +111,7 @@ birth_date date
89111 {
90112 var sqlStatement = @"CREATE TABLE sample.CompositeTest
91113 (
114+ col_text text,
92115 col_person sample.person_type
93116 );" ;
94117
@@ -112,7 +135,6 @@ private void DropTableAndType()
112135
113136 sqlCommand . ExecuteNonQuery ( ) ;
114137 }
115-
116138 }
117139 }
118140}
0 commit comments