2011-04-11 49 views
2

我有一个基于标准化表的POCO。我的问题是,我如何处理将这个没有旋转/标准化的对象改为非标准化/旋转对象?我是否需要创建另一个POCO,这是一个支点版本?如何处理这个问题?如何处理枢轴POCO?

让我们假设归一化的POCO定义为:

客户表

CustomerId int 
BestSeller bool 
NumberOfOrders int 

,我要代表这是

透视客户表

CustomerId int 
BestSellerOrders int 
NotBestSellerOrders int 

UPDATE

这工作,但不知道我喜欢它:

public void UpdateCustomer(CustomerPivot customerPivot) 
{ 
    using (var context = DataObjectFactory.CreateContext()) 
    { 
     // find all the rows to update (2) 
     var rowsToUpdate = context.Customer 
      .Where(w => w.CustomerId == customerPivot.CustomerId).ToList(); 

     var first = rowsToUpdate.Where(w => w.BestSeller == true).SingleOrDefault(); 
     var second = rowsToUpdate.Where(w => w.BestSeller == false).SingleOrDefault(); 
     first.NumberOfOrders = (int)customerPivot.BestSellerOrders; 
     second.NumberOfOrders = (int)customerPivot.NotBestSellerOrders; 

     context.Customer.ApplyChanges(first); 
     context.Customer.ApplyChanges(second); 
     context.SaveChanges(); 
    } 
} 

回答

1

是的,这是定义摆动查询或使用的物化结果,可能新的自定义对象映射到数据库视图的新只读实体自定义SQL查询由ExecuteStoreQuery执行,因为在SQL Server中使用pivoting更容易,更快速。

+0

我希望不会是这种情况:(如果我想执行基本的CRUD操作并将新的/更新/删除的信息放回到原始POCO对象中,这种方法仍然可行吗? – 2011-04-11 21:55:06

+0

我不确定你想要在客户端使用CRUD并获得修改的Pivot客户?在这种情况下,您必须再次查询db。 – 2011-04-11 22:06:37

+0

对不起,我的意思是我只想向用户显示数据为pivoted/denormalized。 – 2011-04-11 22:09:16