1)商務邏輯層:DynamicDataBusi.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using MEntities;
using System.Data.SqlClient;
namespace BBusiness
{
public class DynamicDataBusi
{
public DynamicDataTable GetDynamicDataTable(string strSQL, string ConnStr)
{
SqlConnection theConn = new SqlConnection(ConnStr);
DataTable theTable = new HDatabase.DynamicDataAccess().GetDataTable(strSQL, theConn);
DynamicDataTable theDynamicTable = new DynamicDataTable();
if (theTable != null)
{
foreach (DataColumn col in theTable.Columns)
{
DynamicDataColumn theCol = new DynamicDataColumn();
theCol.Caption = col.Caption;
theCol.DataType = col.DataType.Name;
theCol.FieldName = col.ColumnName;
theCol.Length = col.MaxLength;
theCol.FormatString = "";
theDynamicTable.Columns.Add(theCol);
}
foreach (DataRow row in theTable.Rows)
{
DynamicDataRow theRow = new DynamicDataRow();
for (int i = 0; i < theTable.Columns.Count; i++)
{
DynamicDataField theDataField = new DynamicDataField();
theDataField.FieldName = theTable.Columns[i].ColumnName;
theDataField.DataType = theTable.Columns[i].DataType.Name;
theDataField.Value = row[i];
theRow.DataFields.Add(theDataField);
}
theDynamicTable.Rows.Add(theRow);
}
}
return theDynamicTable;
}
}
}
所有要提供給用戶端得實體的打包,以及服務端得實體緩衝之類的都可以封裝到這一層。商務邏輯層另外的最主要的功能就是商務邏輯的處理了,簡單的新增,修改,刪除和查詢都可在這裡封裝,有的雖然只是簡單的調用資料訪問層,但也不要讓服務層直接調用。因為在這一層可以增加很多功能,比如衝突檢測,邏輯檢查等。
2)RIA 服務層:DynamicDataService
namespace RIAServices.Web
{
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.ServiceModel.DomainServices.Hosting;
using System.ServiceModel.DomainServices.Server;
using MEntities;
using BBusiness;
// TODO: 建立包含應用程式邏輯的方法。
[EnableClientAccess()]
public class DynamicDataService : DomainService
{
static string conn = "Data Source=127.0.0.1;Initial Catalog=DEVTEST;Persist Security Info=True;User ID=sa;Password=tian777888";
[Invoke]
public DynamicDataTable GetDynamicTable(string strSQL)
{
//在這裡檢查調用是否合法
return new DynamicDataBusi().GetDynamicDataTable(strSQL, conn);
}
}
}
大家要注意,我的資料庫連接出現在這一層,純粹是巧合,資料庫連接應該放到資料訪問層或者設定檔裡,如果是比較複雜的應用,比如SaaS,還並需用單獨的類進行管理。
另外注意,這裡我沒有直接將服務層放在承載silverlight用戶端得webapp上,而是建立的RIA服務類庫。
到這裡,服務端的實現就完成了,編譯後,用戶端就可以看到我們的實體,並可調用服務方法。
後面,我們繼續建立用戶端的應用。
友情提示:以上代碼經過實測,絕對可以OK的。另外注意你們的WCF RIA Services 至少要到SP1,否則會有編譯錯誤.