UML软件工程组织

ORM新实现——Dali
    今天在http://0daycheck.eastgame.net/上看到一个ORM工具——Dali,号称最大能省80%的代码。Down下来看看,原来它将传统ORM中的配置文件省了,而且在实体映射类中加入了与数据操作相关的事件,还有代码生成工具。做简单的应用确实方便了很多。

    把它给的两个例了贴出来,大家一看便知道有多方便了。

    不使用Dali的例子:


  1using System;
  2using System.Data;
  3using System.Configuration;
  4using System.Collections;
  5using System.Web;
  6using System.Web.Security;
  7using System.Web.UI;
  8using System.Web.UI.WebControls;
  9using System.Web.UI.WebControls.WebParts;
 10using System.Web.UI.HtmlControls;
 11using System.Data.SqlClient;
 12
 13namespace 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

  使用Dali的例子:
 1using System;
 2using System.Data;
 3using System.Configuration;
 4using System.Collections;
 5using System.Web;
 6using System.Web.Security;
 7using System.Web.UI;
 8using System.Web.UI.WebControls;
 9using System.Web.UI.WebControls.WebParts;
10using System.Web.UI.HtmlControls;
11
12using Revelation.Dali;
13
14namespace 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

  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
23using System;
24
25using Revelation.Dali;
26
27namespace 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

    更重要的是没有数据库映射配置文件。

    不过,表关系现在看还处理不了,只能对单表进行处理,希望听棠大哥的SPL能借荐一下它的思想,把SPL做得更方便实用。:)

    东西不复杂,但价格还是高了,$149,网站:http://www.revtechnologies.com/有兴趣的可以去看看。

 

版权所有:UML软件工程组织