【问题标题】:How to handle pivoting POCOs?如何处理旋转 POCO?
【发布时间】:2011-04-11 21:26:04
【问题描述】:

我有一个基于规范化表的 POCO。我的问题是如何处理将这个未旋转/规范化的对象更改为非规范化/旋转对象?我是否需要创建另一个 POCO 作为旋转版本?如何处理?

假设标准化的 POCO 定义为:

客户表

CustomerId int
BestSeller bool
NumberOfOrders int

我想将其表示为

透视客户表

CustomerId int
BestSellerOrders int
NotBestSellerOrders int

更新

这可行,但不确定我是否喜欢它:

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();
    }
}

【问题讨论】:

    标签: c# linq entity-framework-4 poco


    【解决方案1】:

    是的,这是一个映射到数据库视图的新只读实体,它定义了透视查询或可能用作ExecuteStoreQuery 执行的自定义 SQL 查询的具体化结果的新自定义对象,因为在 SQL Server 中使用透视更加容易和快捷。

    【讨论】:

    • 我希望不会是这样 :(。如果我想执行基本的 CRUD 操作并将新/更新/删除的信息返回到原始 POCO 对象中,这种方法仍然有效吗?
    • 我现在不确定你的意思。您想对客户使用 CRUD 并获得修改后的 Pivot 客户吗?在这种情况下,您必须再次查询 db。
    • 对不起,我的意思是我只想向用户显示数据作为透视/非规范化。用户对数据的任何更改都需要反映在规范化表中。
    • 但对透视数据的更改无法转换回规范化 poco。
    • 它们可以通过映射函数将透视数据映射到多个规范化 poco 对象。我想这将是唯一的解决方案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多