2013-10-24 45 views
1

这里是一个示例模式,其中 “=>” 代表 “一个一对多” 的关系:

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

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

到目前为止,我用LoadWith:如何检索LINQ对象及其所有相关信息?

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

我会去'VAR合同= db.Contracts .Where(c => c.ContractId == contractId;'并让方法返回'IQueryable',但我认为这不会解决你的问题。你能发布你的元数据定义的类。 – ChrisF

+0

我知道, m不是很帮你,但是当涉及到更复杂的查询时,我也有点失落,但是似乎使用'JOIN'可能会使它工作。不确定的语法,你有没有尝试在你的包括'JOIN'查询? – Leron

+0

http://msdn.microsoft.com/en-us/library/bb5 34268(v = vs.110).aspx#remarksToggle似乎无法完成。但是,它可能与实体框架。考虑使用它,而不是,因为它有积极的发展。 – Aron

回答

0

您可以添加不启动在Contract加载选项:

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

注意添加许多加载项可能会导致多个查询被解雇(1分+ N的问题)。你必须检查它是否仍然有效。稍后根据需求查询相关数据可能会更高效。

0

I found the answer on this question to work for me

复制答案:

我发现这是什么! Linq to SQL会将[DataMember()]属性放在子记录上,而不是父项。我不得不在关联下添加[DataMember()]属性。

的一面是,这是一个手动输入到将被覆盖的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 
    { 
     ... 
    } 
} 
+0

您确定这不会产生任何副作用吗? (例如,循环引用,或者当你不想要的时候急于加载。)手动更改dbml是一个大问题。你尝试了我的建议吗? –

相关问题