如何检索LINQ对象及其所有相关信息?

时间:2013-10-24 22:07:11

标签: c# linq wcf linq-to-sql

以下是“=>”的示例架构代表“一对多”的关系:

合同=> ContractCustomers
合同=> ContractDiscounts
客户=> ContractCustomers
DiscountType => ContractDiscounts

我试图通过一次调用服务器来检索合同对象及其所有相关细节。

到目前为止,我使用了LoadWith:

 using (Data.ABWXDataContext db = new Data.ABWXDataContext())
            {
                DataLoadOptions options = new DataLoadOptions();
                options.LoadWith<Data.Contract>(c => c.ContractCustomers);
                options.LoadWith<Data.Contract>(c => c.ContractDiscounts);
                options.LoadWith<Data.ContractDiscount>(c => c.DiscountType);
                options.LoadWith<Data.ContractCustomer>(c => c.Customers);
                db.LoadOptions = options;
                var Contract = from con in db.Contracts
                               where con.ContractId == contractId
                               select con;
                return Contract.ToList();
            }
        }

以上代码可以很好地包含ContractDiscounts和ContractCustomers表。但是它不允许我访问(折扣类型,客户)。我知道他们不是合同的孩子,我怎么能跟他们一起签订合同对象呢?

如果这是一项简单的常见任务,我道歉。

2 个答案:

答案 0 :(得分:0)

您可以添加不从Contract开始的加载选项:

options.LoadWith<Data.ContractCustomer>(c => c.Customer);
options.LoadWith<Data.ContractDiscount>(c => c.Discount);

请注意,添加许多加载选项可能会导致多个查询被触发(1 + n问题)。你必须检查它是否仍然有效。稍后按需查询相关数据可能更有效。

答案 1 :(得分:0)

I found the answer on this question to work for me

复制的答案:

我发现它是什么! Linq to SQL将[DataMember()]属性放在子记录上,但不是父母。我必须在关联下添加[DataMember()]属性。

Down Side是这是context.designer.cs的手动输入,如果更改了dbml,它将被覆盖: - (

[Association(Name="CustomerStatus_Customer", Storage="_CustomerStatus", ThisKey="CustomerStatusId", OtherKey="CustomerStatusId", IsForeignKey=true)]
[DataMember()]
public CustomerStatus CustomerStatus
{
    get
    {
        return this._CustomerStatus.Entity;
    }
    set
    { 
      ...
     }
 }