以下是“=>”的示例架构代表“一对多”的关系:
合同=> 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表。但是它不允许我访问(折扣类型,客户)。我知道他们不是合同的孩子,我怎么能跟他们一起签订合同对象呢?
如果这是一项简单的常见任务,我道歉。
答案 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
{
...
}
}