在vb .net winforms应用程序中,我正在为记录中的“宽而浅”的孩子尝试一些东西。我使用强类型业务对象(Strataframe)。
我的计划是在表格中放置的数据集中收集一些“子表”。它们在持久化数据中没有对应关系,因此数据集是无类型的,我通过表的属性表创建模式。每个表都是接口中datagridview的数据源。
在我的概念验证示例中,我的主要业务对象(CustomerBO)与SQL Server 2008表交互,其中包含字段 - pk,name,和第三列,当前我认为是XML,但是可能只是作为varchar(max)如果对于保存序列化数据集更有效,则容易为varbinary(max)。
bo.bigfield将是我想要保存byte()数组或XML的强类型prop,或者代表该记录的数据集的任何东西。
因此,问题简而言之 - 如何将数据集转换为单个数据并从该数据中重现数据集。这是我第一次涉足数据集,datagridviews,所以如果有更好的方法可以实现我正在聆听的任何内容。
非常感谢代码和建议 - vb或C#
答案 0 :(得分:0)
切片和骰子有很多种方法。你所说的是对象关系映射。有很多工具/框架,这是我的最爱:
对于快速应用程序开发,SubSonic是我最喜欢的。使用最新的3.x版本,您所要做的就是创建一个连接字符串,调用SubSonic持久层,并传入您的对象。它将创建用于在DB中持久保存对象的DDL,而不必真正地使用那些东西。这是SubSonic的一个例子:
public class BaseDAO
{
private const String CONNECTION_STRING = "Repository";
private static BaseDAO dao = new BaseDAO();
private SimpleRepository repository;
protected BaseDAO()
{
if (repository == null)
{
repository = new SimpleRepository(CONNECTION_STRING, SimpleRepositoryOptions.RunMigrations);
}
}
public BaseDAO Instance()
{
return dao;
}
public SubSonic.Repository.SimpleRepository Repository
{
get { return this.repository; }
set { this.repository = value; }
}
}
public class ProductDAO : BaseDAO
{
public void save(ProductVO product)
{
if (product != null)
{
if (product.ID == null)
{
product.ID = Guid.NewGuid();
}
this.Repository.Add<ProductVO>(product);
}
else
{
throw new ArgumentException("The product passed in was null!");
}
}
public void update(ProductVO product)
{
if (product != null)
{
this.Repository.Update<ProductVO>(product);
}
else
{
throw new ArgumentException("The product passed in was null!");
}
}
public List<ProductVO> fetchAll()
{
return fetchAll(null);
}
public List<ProductVO> fetchAll(String name)
{
IEnumerable<ProductVO> list = this.Repository.All<ProductVO>();
if (name != null && name.Length > 0)
{
var output =
from products in list
where products.Name.ToLower().Contains(name.Trim().ToLower())
select products;
list = output.ToList();
}
return list.OrderBy(product => product.Name).ToList();
}
public ProductVO fetchByID(object ID)
{
return this.Repository.Single<ProductVO>(ID);
}
public void delete(ProductVO product)
{
this.Repository.Delete<ProductVO>(product.ID);
}
}
就这么简单。