2009-11-14 25 views
0

在vb .net winforms应用程序中,我尝试了某些记录的“宽和浅”子元素。我使用强类型的业务对象(Strataframe)。将数据集序列化为强类型业务对象属性

我的计划是在表单上放置一个数据集并收集大量“子表”。他们在持久数据中没有对应关系,所以数据集是无类型的,我通过表格的属性表创建模式。每个表格都是界面中datagridview的数据源。

在我的概念证明示例中,我的主要业务对象(CustomerBO)与SQL Server 2008表中的字段(pk,name,)进行交互,第三列当前为varchar(max),因为我认为XML可能只是很容易变成varbinary(max),如果这对保存序列化数据集更好。

bo.bigfield将是强类型的道具我想持有byte()数组或XML或任何表示该记录的数据集的内容。

所以,问题简而言之 - 我如何将数据集转换为单个数据并从该数据中重现数据集。这是我第一次进入数据集,datagridviews,所以如果有更好的方法来完成我正在听的任何。

代码和建议非常赞赏 - VB或C#

回答

0

有许多的方式来大卸八块。你在谈论的是对象关系映射。有许多的工具/框架在那里,这里是我的最爱:

的快速应用开发,亚音速是我最喜欢的手下来。使用最新的3.x版本,你所要做的就是创建一个连接字符串,调用SubSonic持久层,并传入你的对象。它将创建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); 
    } 
} 

就是这么简单。

相关问题