Silverlight 如何在子实体对象中包含父对象列表
我的数据库中有以下表格Silverlight 如何在子实体对象中包含父对象列表,silverlight,linq,frameworks,join,entity,Silverlight,Linq,Frameworks,Join,Entity,我的数据库中有以下表格 Table1: tblAddressType (Id, Name) Table2: tblAddressDtls (Id, AddressTypeId, Address1) 我将加入上述两个表,以获得所有地址类型的列表和相应的地址详细信息,如下所示 SQL Query: select t1.*, t2.* from tblAddressType t1 left outer join tblAddressDtls t2 on t1.Id
Table1: tblAddressType (Id, Name)
Table2: tblAddressDtls (Id, AddressTypeId, Address1)
我将加入上述两个表,以获得所有地址类型的列表和相应的地址详细信息,如下所示
SQL Query:
select t1.*, t2.*
from tblAddressType t1
left outer join tblAddressDtls t2 on t1.Id = t2.AddressTypeId and t2.Id = 1;
对于上面的表,我创建了POCO实体类,如下所示:
[Table("tblAddressType ")]
public partial class AddressType
{
[Key]
[Column(Name="ID")]
public int ID { get; set; }
[Required]
[Column(Name = "Name")]
public virtual string Name {get; set;}
[Include]
[Association("AddressTypeAddress", "ID", "AddressTypeId")]
public virtual ICollection<Address> Addresses { get; set; }
}
[Table("tblAddress", SchemaName="dbo")]
public class Address
{
[Column(Name="ID")]
public int ID { get; set; }
[Column(Name = "AddressTypeId")]
public int? AddressTypeId{ get; set; }
[Column(Name = "Address1")]
public string Address1{ get; set; }
[Include]
[Association("AddressTypeAddress", "AddressTypeId", "ID", IsForeignKey = true)]
public virtual AddressType AddressType { get; set; }
}
现在,我想编写一个名为“GetAddressById(int addressId)”的域服务方法,它应该返回匹配的Address对象以及AddressType对象列表,因为我需要将“AddressType”对象列表绑定到“添加/编辑地址”屏幕中的下拉框中
I wanted to include and fetch list of "AddressType" objects data at the time of
fetching Address object data itself to avoid round-trip to server
in my silverlight client app.
请告诉我实现此功能的最佳方法?您可以通过在数据库中创建一个可返回多个结果集的存储过程来实现。首先是让你得到你想要的孩子和父母,其次是让你得到你的父母名单。然后,您可以使用此处描述的工作方法: 这可以让你得到结果的每一部分 另外,查询不需要左连接。因为where子句引用右侧的表,所以在联接的右侧永远不会得到null值。改为使用内部联接。新建: 我假设在数据库中,地址与地址类型有关系,并且再次假设您使用的是EntityFramework
GetAddressById(int addressId){
return dbContext.Address.SingleOrDefault(a => a.ID == addressId).Include("AddressTypes");
}
这行代码现在将获得一个id为addressId的地址,如果没有,它将返回null,或者如果返回更多,它将抛出一个异常,Include将告诉EF,当您获得地址时,您还希望加载AddressTypes,并将创建一个适当的联接来实现这一点,所有这些都将转换为对数据库的单个查询,并得到您想要的结果
旧版:
假设我们只需要一次对db的调用就可以得到AddressType及其所有地址(如果您使用EntityFramework),我们可以调用如下方法
GetAddressTypeIncludingAddresses(int id){
return _context.AddressType.Include("Addressess");
/*if you use ctp5 of ef code first you should even be able to do (at => at.Addresses) in the include */
}
然后,当您使用它时,只需执行addressType.Id
和foreach(addressType.Addresses中的var-address){}
等操作
我希望我理解了您的问题,如果没有,请再试一次,我将编辑我的答案。我已更新了我的答案,如果这不符合您的要求,请纠正我,如果有帮助,请接受答案。
GetAddressTypeIncludingAddresses(int id){
return _context.AddressType.Include("Addressess");
/*if you use ctp5 of ef code first you should even be able to do (at => at.Addresses) in the include */
}