今天在http://0daycheck.eastgame.net/上看到一个ORM工具——Dali,号称最大能省80%的代码。Down下来看看,原来它将传统ORM中的配置文件省了,而且在实体映射类中加入了与数据操作相关的事件,还有代码生成工具。做简单的应用确实方便了很多。
把它给的两个例了贴出来,大家一看便知道有多方便了。
不使用Dali的例子:
1
using
System;
2
using
System.Data;
3
using
System.Configuration;
4
using
System.Collections;
5
using
System.Web;
6
using
System.Web.Security;
7
using
System.Web.UI;
8
using
System.Web.UI.WebControls;
9
using
System.Web.UI.WebControls.WebParts;
10
using
System.Web.UI.HtmlControls;
11
using
System.Data.SqlClient;
12
13
namespace
DaliWebDemoCS
14
{
15
// This code uses SQL Server. To use a different database you will need to
16
// change all the SQL Server specific objects such as SqlDataAdapter,
17
// SqlConnection and SqlCommand as well as the using statement above.
18
19
public partial class CustomerNoDali : System.Web.UI.Page
20
{
21
private string connectString;
22
23
private void Page_Load(object sender, System.EventArgs e)
24
{
25
connectString = (string)Application["ConnectString"];
26
27
if (!IsPostBack)
28
{
29
// Populate the customer dropdown list
30
FillCustomerIdDropdown();
31
32
// Load all the form controls with data from the database.
33
LoadPage();
34
}
35
}
36
37
protected void CustomerID_SelectedIndexChanged(object sender, System.EventArgs e)
38
{
39
// Load all the form controls with data from the database.
40
LoadPage();
41
}
42
43
protected void SaveCustomerLinkButton_Click(object sender, System.EventArgs e)
44
{
45
// Save all the form control data to the database.
46
SavePage();
47
48
// Fill the Customer dropdown again in case customer changed. Before
49
// filling, get the current customer. After filling, re-select customer.
50
string selectedCustomer = CustomerID.SelectedValue;
51
FillCustomerIdDropdown();
52
CustomerID.SelectedValue = selectedCustomer;
53
}
54
55
private void FillCustomerIdDropdown()
56
{
57
// Get a collection of CustomerListItem objects to fill the dropdown.
58
string sql =
59
"SELECT CustomerID, CompanyName " +
60
" FROM Customers " +
61
" ORDER BY CompanyName";
62
DataTable table = new DataTable();
63
SqlDataAdapter adapter = new SqlDataAdapter(sql, connectString);
64
adapter.Fill(table);
65
66
// Use the table as the data source for the dropdown
67
CustomerID.DataSource = table;
68
CustomerID.DataValueField = "CustomerID";
69
CustomerID.DataTextField = "CompanyName";
70
71
CustomerID.DataBind();
72
}
73
74
private void LoadPage()
75
{
76
string sql =
77
"SELECT * " +
78
" FROM Customers " +
79
" WHERE CustomerID = @CustomerID ";
80
DataTable table = new DataTable();
81
SqlDataAdapter adapter = new SqlDataAdapter(sql, connectString);
82
adapter.SelectCommand.Parameters.AddWithValue("@CustomerID", CustomerID.SelectedValue);
83
adapter.Fill(table);
84
85
CompanyName.Text = table.Rows[0]["CompanyName"] as string;
86
ContactName.Text = table.Rows[0]["ContactName"] as string;
87
ContactTitle.Text = table.Rows[0]["ContactTitle"] as string;
88
Phone.Text = table.Rows[0]["Phone"] as string;
89
Fax.Text = table.Rows[0]["Fax"] as string;
90
Address.Text = table.Rows[0]["Address"] as string;
91
City.Text = table.Rows[0]["City"] as string;
92
Region.Text = table.Rows[0]["Region"] as string;
93
PostalCode.Text = table.Rows[0]["PostalCode"] as string;
94
Country.Text = table.Rows[0]["Country"] as string;
95
}
96
97
private void SavePage()
98
{
99
string sql =
100
"UPDATE Customers " +
101
" SET CompanyName = @CompanyName, " +
102
" ContactName = @ContactName, " +
103
" ContactTitle = @ContactTitle, " +
104
" Phone = @Phone, " +
105
" Fax = @Fax, " +
106
" Address = @Address, " +
107
" City = @City, " +
108
" Region = @Region, " +
109
" PostalCode = @PostalCode, " +
110
" Country = @Country " +
111
" WHERE CustomerID = @CustomerID ";
112
DataTable table = new DataTable();
113
SqlConnection connection = new SqlConnection(connectString);
114
SqlCommand command = new SqlCommand(sql, connection);
115
command.Parameters.AddWithValue("@CustomerID", CustomerID.SelectedValue);
116
command.Parameters.AddWithValue("@CompanyName", CompanyName.Text);
117
command.Parameters.AddWithValue("@ContactName", ContactName.Text);
118
command.Parameters.AddWithValue("@ContactTitle", ContactTitle.Text);
119
command.Parameters.AddWithValue("@Phone", Phone.Text);
120
command.Parameters.AddWithValue("@Fax", Fax.Text);
121
command.Parameters.AddWithValue("@Address", Address.Text);
122
command.Parameters.AddWithValue("@City", City.Text);
123
command.Parameters.AddWithValue("@Region", Region.Text);
124
command.Parameters.AddWithValue("@PostalCode", PostalCode.Text);
125
command.Parameters.AddWithValue("@Country", Country.Text);
126
connection.Open();
127
command.ExecuteNonQuery();
128
connection.Close();
129
}
130
}
131
}
132

2

3

4

5

6

7

8

9

10

11

12

13

14



15

16

17

18

19

20



21

22

23

24



25

26

27

28



29

30

31

32

33

34

35

36

37

38



39

40

41

42

43

44



45

46

47

48

49

50

51

52

53

54

55

56



57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75



76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98



99

100

101

102

103

104

105

106

107

108

109

110

111

112

113

114

115

116

117

118

119

120

121

122

123

124

125

126

127

128

129

130

131

132

使用 Dali 的例子:
1
using
System;
2
using
System.Data;
3
using
System.Configuration;
4
using
System.Collections;
5
using
System.Web;
6
using
System.Web.Security;
7
using
System.Web.UI;
8
using
System.Web.UI.WebControls;
9
using
System.Web.UI.WebControls.WebParts;
10
using
System.Web.UI.HtmlControls;
11
12
using
Revelation.Dali;
13
14
namespace
DaliWebDemoCS
15
{
16
[DaliClass(TableName = "Customers")]
17
public partial class Customer : System.Web.UI.Page
18
{
19
private void Page_Load(object sender, System.EventArgs e)
20
{
21
if (!IsPostBack)
22
{
23
// Populate the customer dropdown list
24
FillCustomerIdDropdown();
25
26
// Load all the form controls with data from the database.
27
DataManager.Default.Load(Page);
28
}
29
}
30
31
protected void CustomerID_SelectedIndexChanged(object sender, System.EventArgs e)
32
{
33
// Load all the form controls with data from the database.
34
DataManager.Default.Load(Page);
35
}
36
37
protected void SaveCustomerLinkButton_Click(object sender, System.EventArgs e)
38
{
39
// Save all the form control data to the database.
40
DataManager.Default.Save(Page);
41
42
// Fill the Customer dropdown again in case customer changed. Before
43
// filling, get the current customer. After filling, re-select customer.
44
string selectedCustomer = CustomerID.SelectedValue;
45
FillCustomerIdDropdown();
46
CustomerID.SelectedValue = selectedCustomer;
47
}
48
49
private void FillCustomerIdDropdown()
50
{
51
// Get a collection of CustomerListItem objects to fill the dropdown.
52
ArrayList customers = DataManager.Default.Find(
53
typeof(CustomerListItem), null, "CompanyName");
54
55
// Use the list as the data source for the dropdown
56
CustomerID.DataSource = customers;
57
CustomerID.DataValueField = "CustomerID";
58
CustomerID.DataTextField = "CompanyName";
59
60
CustomerID.DataBind();
61
}
62
}
63
}
64

2

3

4

5

6

7

8

9

10

11

12

13

14

15



16

17

18



19

20



21

22



23

24

25

26

27

28

29

30

31

32



33

34

35

36

37

38



39

40

41

42

43

44

45

46

47

48

49

50



51

52

53

54

55

56

57

58

59

60

61

62

63

64

CustomerListItem类:
1
/**/
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
2
* CustomerListItem.cs
3
* -------------------
4
*
5
* This file is part of the Revelation Technologies Dali code samples.
6
*
7
* Copyright ?2005 Revelation Technologies, LLC. All rights reserved.
8
*
9
* This source code is intended only as a supplement to Revelation
10
* Technologies Dali development tools and documentation. It is intended
11
* to demonstrate specific concepts and may not be suitable for all
12
* applications. You may freely use this source code in whole or in
13
* part. Use of this code in whole or in part acknowledges your acceptance
14
* of the following terms and conditions:
15
*
16
* THIS CODE AND INFORMATION ARE PROVIDED "AS IS" WITHOUT WARRANTY OF ANY
17
* KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
18
* IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A PARTICULAR
19
* PURPOSE.
20
*
21
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
22
23
using
System;
24
25
using
Revelation.Dali;
26
27
namespace
DaliWebDemoCS
28
{
29
// This class is used to retrieve the CustomerID and CompanyName for all
30
// customers. This data is used to populate the dropdown list. It uses
31
// Properties instead of simple fields because the List's data binding
32
// only works with Properties.
33
34
// Map this class to the customers table
35
[DaliClass(TableName = "Customers")]
36
public class CustomerListItem
37
{
38
public string CustomerID
39
{
40
set
{ customerID_ = value; }
41
get
{ return customerID_; }
42
}
43
private string customerID_;
44
45
public string CompanyName
46
{
47
set
{ companyName_ = value; }
48
get
{ return companyName_; }
49
}
50
public string companyName_;
51
}
52
}
53


2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28



29

30

31

32

33

34

35

36

37



38

39



40



41



42

43

44

45

46



47



48



49

50

51

52

53

更重要的是没有数据库映射配置文件。
不过,表关系现在看还处理不了,只能对单表进行处理,希望听棠大哥的SPL能借荐一下它的思想,把SPL做得更方便实用。:)
东西不复杂,但价格还是高了,$149,网站:http://www.revtechnologies.com/有兴趣的可以去看看。
这里有个下载好的版本,可以直接从这里下载。