是否可以通过存储过程或函数调用将在LINQ中获得的结果集转换为可以检索外键相关对象的“实时”对象集?
例如,如果我的存储过程返回一组类型为“Contact”的行(= LINQ对象),那么我似乎无法获得Contact.BillingAddress(与外键相关)。
知道如何使这项工作吗?
答案 0 :(得分:1)
只需将Contacts表和BillingAddresses表拖到您的DBML设计器中,就可以正确导入Contacts和BillingAddress对象,包括关系(我假设您实际上已经这样做了,但我之所以提到它)。
接下来,在DBML中更改存储过程/函数以声明它返回Contacts类型,请参阅How to: Change the Return Type of a DataContext Method (O/R Designer)。现在,程序的返回将是一个“实时”联系人对象。
答案 1 :(得分:0)
您可以在Linq to SQL设计器中执行此操作,方法是将存储过程从服务器资源管理器拖到对象窗格右侧的“方法”窗格中。
然后,您将在datacontext上有一个方法,它将返回一种类型的ISingleResult。您可以选择覆盖此方法以映射到您希望的模型中的任何类型。
答案 2 :(得分:0)
您必须明确地建立表之间的关系。 LINQ to SQL设计师可能能够做到这一点,但我更喜欢编写代码,如下所示:
[Table(Name="Contact")]
public class Contact
{
[Column(Id=true)]
public int ContactID;
[Column]
public string BillingAddressID;
private EntityRef<BillingAddress> _BillingAddress;
[Association(Storage="_BillingAddress", ThisKey="BillingAddressID")]
public BillingAddress BillingAddress {
get { return this._BillingAddress.Entity; }
set { this._BillingAddress.Entity = value; }
}
}
[Table(Name="BillingAddress")]
public class BillingAddress
{
[Column(Id=true)]
public string BillingAddressID;
...
private EntitySet<Contact> _Contacts;
[Association(Storage="_Contacts", OtherKey="BillingAddressID")]
public EntitySet<Contact> Contacts {
get { return this._Contacts; }
set { this._Contacts.Assign(value); }
}
}