【发布时间】:2011-07-08 02:37:49
【问题描述】:
我正在做的是为每个表创建用于选择/插入/更新的存储过程,然后我(如果选择)用所有行填充数据表并传递给与 gridview 绑定的 objectdatasource。技术好还是坏?通过gridviews在数据库中更新/删除/插入记录有哪些好的技术(使用BO、BL、DAL)?
谢谢!
【问题讨论】:
我正在做的是为每个表创建用于选择/插入/更新的存储过程,然后我(如果选择)用所有行填充数据表并传递给与 gridview 绑定的 objectdatasource。技术好还是坏?通过gridviews在数据库中更新/删除/插入记录有哪些好的技术(使用BO、BL、DAL)?
谢谢!
【问题讨论】:
我做了一个数据模型层,它封装了我想暴露给主应用程序的所有数据。然后我有一个业务逻辑层,它将模型层连接到数据访问层。数据访问层是所有魔法发生的地方。在这里,我使用 System.Data、System.Data.SqlClient 或 MySQL.Data.MySQLClient(或任何你使用的——它有一个 .NET 连接器)命名空间来实际调用存储过程并将数据放入数据模型中反之亦然。
下面是我解释过的一个例子,但我的做法有点不同。我喜欢我的数据模型来实际公开访问方法,它有助于组织数据。此外,我使用 System.Data.DataTable 将数据绑定到 gridview。它工作得非常好,甚至允许您存储主键和外键信息。它将为您管理将架构信息传递到网格视图。
public class ImageListModel
{
private ImageListBLL objImageListBLL;
public ImageListModel(string connectionString, string databaseEngine, int groupID)
{
if(databaseEngine.ToLower() == "mysql")
objImageListBLL = new ImageListBLL(DatabaseEngine.MySQL, connectionString);
GroupID = groupID;
}
public int GroupID
{
get;
set;
}
public DataTable GetImageList()
{
return objImageListBLL.GetImageList(GroupID);
}
public bool InsertImage(ImageModel objImage)
{
objImage.GroupID = GroupID;
return objImage.Insert();
}
public bool DeleteImage(ImageModel objImage)
{
return objImage.Delete();
}
public bool EditImage(ImageModel objImage)
{
return objImage.Edit();
}
}
public class ImageModel
{
private ImageBLL objImageBLL;
public ImageModel(string connectionString, string databaseEngine)
{
if (databaseEngine.ToLower() == "mysql")
objImageBLL = new ImageBLL(DatabaseEngine.MySQL, connectionString);
}
public long ID
{
get;
set;
}
public string TitleTop
{
get;
set;
}
public string TitleBottom
{
get;
set;
}
public string ImageUrl
{
get;
set;
}
public string ExtraMarkup
{
get;
set;
}
public string DescriptionUrl
{
get;
set;
}
public int Order
{
get;
set;
}
public int UserID
{
get;
set;
}
public int GroupID
{
get;
set;
}
public bool Insert()
{
return objImageBLL.InsertImage(this);
}
public bool Edit()
{
return objImageBLL.EditImage(this);
}
public bool Delete()
{
return objImageBLL.DeleteImage(this);
}
public void ChangePosition()
{
objImageBLL.ChangeImagePosition(this);
}
}
如您所见,DAL 完全隐藏。 BLL 管理调用适当的数据访问层方法。这对具有适当数据状态操作、检索和保存方法的图像的通用列表进行建模。在我看来,这就是建模的意义。
我假设您知道如何使用 db 连接器的具体细节。如果你不知道,请告诉我,我会发布更多代码。
我的模型工作如下:
DataModel -- Exposed to main application
|
|
\/
Business Logic Layer
|
pass DataModel
|
\/
Data Access Layer
【讨论】:
这种方法是使用网格视图的基本 CRUD 功能的好方法(这可能就是您所需要的!)。您可以考虑使用 ORM(对象关系映射)工具来制作您可以玩弄的业务对象。
【讨论】:
请使用 ADO.NET 实体数据模型,非常简单!
参考:http://msdn.microsoft.com/en-us/library/aa697427(v=vs.80).aspx
【讨论】: