主要功能:
1、任意类型对象、DataRow和DataReader对象间的透明映射;
2、支持.NET的Nullable类型;
3、较高的性能,性能比基于Reflection的等价转换快约50%,手动代码 vs NBearMapping vs Reflection对象转换的执行时间比大约为1:2.5:3.6,可参见源码中MappingTest.TestPerformance() 测试;
源码、示例及文档下载:
NBearMapping_v1.0.0.2_beta.zip
使用演示:
1
[TestMethod]
2
public void TestDataRowToObject()
3
{
4
ObjectMapper mapper = new ObjectMapper(typeof(DataRow), typeof(User));
5
mapper.AddCustomMappingName("UserID", "ID");
6
User user = (User)mapper.ConvertObject(table.Rows[0]);
7
Assert.AreEqual(table.Rows[0]["UserID"], user.ID);
8
Assert.AreEqual(table.Rows[0]["Name"], user.Name);
9
User user2 = new User();
10
mapper.ConvertObject(table.Rows[0], user2);
11
Assert.AreEqual(table.Rows[0]["UserID"], user2.ID);
12
Assert.AreEqual(table.Rows[0]["Name"], user2.Name);
13
}
14![](/Images/OutliningIndicators/None.gif)
15
[TestMethod]
16
public void TestDataReaderToObject()
17
{
18
ObjectMapper mapper = new ObjectMapper(typeof(IDataReader), typeof(User));
19
mapper.AddCustomMappingName("UserID", "ID");
20
IDataReader reader = table.CreateDataReader();
21
reader.Read();
22
User user = (User)mapper.ConvertObject(reader);
23
Assert.AreEqual(table.Rows[0]["UserID"], user.ID);
24
Assert.AreEqual(table.Rows[0]["Name"], user.Name);
25
User user2 = new User();
26
IDataReader reader2 = table.CreateDataReader();
27
reader2.Read();
28
mapper.ConvertObject(reader2, user2);
29
Assert.AreEqual(table.Rows[0]["UserID"], user2.ID);
30
Assert.AreEqual(table.Rows[0]["Name"], user2.Name);
31
}
32![](/Images/OutliningIndicators/None.gif)
33
[TestMethod]
34
public void ObjectToObject()
35
{
36
ObjectMapper mapper = new ObjectMapper(typeof(User), typeof(User));
37
User user = (User)mapper.ConvertObject(user3);
38
Assert.AreEqual(user3.ID, user.ID);
39
Assert.AreEqual(user3.Name, user.Name);
40
User user2 = new User();
41
mapper.ConvertObject(user3, user2);
42
Assert.AreEqual(user3.ID, user2.ID);
43
Assert.AreEqual(user3.Name, user2.Name);
44
}
45![](/Images/OutliningIndicators/None.gif)
46
[TestMethod]
47
public void TestObjectToDataTableDataReaderAndDataRow()
48
{
49
ObjectMapper mapper = new ObjectMapper(typeof(User), typeof(DataTable));
50
mapper.AddCustomMappingName("ID", "UserID");
51
DataTable userTable = (DataTable)mapper.ConvertObject(user3);
52
Assert.AreEqual(user3.ID, userTable.Rows[0]["UserID"] == DBNull.Value ? null : userTable.Rows[0]["UserID"]);
53
Assert.AreEqual(user3.Name, userTable.Rows[0]["Name"]);
54
mapper.ConvertObject(user3, userTable);
55
Assert.AreEqual(user3.ID, userTable.Rows[1]["UserID"] == DBNull.Value ? null : userTable.Rows[1]["UserID"]);
56
Assert.AreEqual(user3.Name, userTable.Rows[1]["Name"]);
57![](/Images/OutliningIndicators/InBlock.gif)
58
mapper = new ObjectMapper(typeof(User), typeof(IDataReader));
59
mapper.AddCustomMappingName("ID", "UserID");
60
IDataReader reader = (IDataReader)mapper.ConvertObject(user3);
61
Assert.IsNotNull(reader);
62![](/Images/OutliningIndicators/InBlock.gif)
63
mapper = new ObjectMapper(typeof(User), typeof(DataRow));
64
mapper.AddCustomMappingName("ID", "UserID");
65
DataRow row = (DataRow)mapper.ConvertObject(user3);
66
Assert.IsNotNull(row);
67
}
![](/Images/OutliningIndicators/None.gif)
2
![](/Images/OutliningIndicators/None.gif)
3
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
4
![](/Images/OutliningIndicators/InBlock.gif)
5
![](/Images/OutliningIndicators/InBlock.gif)
6
![](/Images/OutliningIndicators/InBlock.gif)
7
![](/Images/OutliningIndicators/InBlock.gif)
8
![](/Images/OutliningIndicators/InBlock.gif)
9
![](/Images/OutliningIndicators/InBlock.gif)
10
![](/Images/OutliningIndicators/InBlock.gif)
11
![](/Images/OutliningIndicators/InBlock.gif)
12
![](/Images/OutliningIndicators/InBlock.gif)
13
![](/Images/OutliningIndicators/ExpandedBlockEnd.gif)
14
![](/Images/OutliningIndicators/None.gif)
15
![](/Images/OutliningIndicators/None.gif)
16
![](/Images/OutliningIndicators/None.gif)
17
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
18
![](/Images/OutliningIndicators/InBlock.gif)
19
![](/Images/OutliningIndicators/InBlock.gif)
20
![](/Images/OutliningIndicators/InBlock.gif)
21
![](/Images/OutliningIndicators/InBlock.gif)
22
![](/Images/OutliningIndicators/InBlock.gif)
23
![](/Images/OutliningIndicators/InBlock.gif)
24
![](/Images/OutliningIndicators/InBlock.gif)
25
![](/Images/OutliningIndicators/InBlock.gif)
26
![](/Images/OutliningIndicators/InBlock.gif)
27
![](/Images/OutliningIndicators/InBlock.gif)
28
![](/Images/OutliningIndicators/InBlock.gif)
29
![](/Images/OutliningIndicators/InBlock.gif)
30
![](/Images/OutliningIndicators/InBlock.gif)
31
![](/Images/OutliningIndicators/ExpandedBlockEnd.gif)
32
![](/Images/OutliningIndicators/None.gif)
33
![](/Images/OutliningIndicators/None.gif)
34
![](/Images/OutliningIndicators/None.gif)
35
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
36
![](/Images/OutliningIndicators/InBlock.gif)
37
![](/Images/OutliningIndicators/InBlock.gif)
38
![](/Images/OutliningIndicators/InBlock.gif)
39
![](/Images/OutliningIndicators/InBlock.gif)
40
![](/Images/OutliningIndicators/InBlock.gif)
41
![](/Images/OutliningIndicators/InBlock.gif)
42
![](/Images/OutliningIndicators/InBlock.gif)
43
![](/Images/OutliningIndicators/InBlock.gif)
44
![](/Images/OutliningIndicators/ExpandedBlockEnd.gif)
45
![](/Images/OutliningIndicators/None.gif)
46
![](/Images/OutliningIndicators/None.gif)
47
![](/Images/OutliningIndicators/None.gif)
48
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
49
![](/Images/OutliningIndicators/InBlock.gif)
50
![](/Images/OutliningIndicators/InBlock.gif)
51
![](/Images/OutliningIndicators/InBlock.gif)
52
![](/Images/OutliningIndicators/InBlock.gif)
53
![](/Images/OutliningIndicators/InBlock.gif)
54
![](/Images/OutliningIndicators/InBlock.gif)
55
![](/Images/OutliningIndicators/InBlock.gif)
56
![](/Images/OutliningIndicators/InBlock.gif)
57
![](/Images/OutliningIndicators/InBlock.gif)
58
![](/Images/OutliningIndicators/InBlock.gif)
59
![](/Images/OutliningIndicators/InBlock.gif)
60
![](/Images/OutliningIndicators/InBlock.gif)
61
![](/Images/OutliningIndicators/InBlock.gif)
62
![](/Images/OutliningIndicators/InBlock.gif)
63
![](/Images/OutliningIndicators/InBlock.gif)
64
![](/Images/OutliningIndicators/InBlock.gif)
65
![](/Images/OutliningIndicators/InBlock.gif)
66
![](/Images/OutliningIndicators/InBlock.gif)
67
![](/Images/OutliningIndicators/ExpandedBlockEnd.gif)
修订
7/26 更新至v1.0.0.1 修复1.0.0.0中的set null值的bug。
8/6 更新至v1.0.0.2 支持枚举类型字段