LINQ to SQL表依赖性

时间:2008-10-08 10:37:46

标签: asp.net-mvc linq linq-to-sql

如果我有两张桌子......分类和宠物。

在LINQ to SQL中是否有办法将连接的查询映射的结果映射到另一个强类型类(例如:PetWithCategoryName),以便我可以强烈地将它传递给MVC视图?

我目前有分类和宠物类......我应该再制作一个吗?

也许我在这里遗漏了一些东西。你们任何人都可以开导我吗?

from p in petTable
join c in categoryTable on p.CategoryId equals c.Id
where (c.Id == categoryId.Value)
select new
{
    p.Id, 
    p.Name,
    p.Description,
    p.Price,
    CategoryName = c.Name
}

<?xml version="1.0" encoding="utf-8" ?>
<Database Name="PetShop" xmlns="http://schemas.microsoft.com/linqtosql/mapping/2007">
  <Table Name="Category" Member="PetShop.Models.Category">
    <Type Name="PetShop.Models.Category">
      <Column Name="Id" Member="Id" IsDbGenerated="true" IsPrimaryKey="true" />
      <Column Name="Name" Member="Name" />
      <Column Name="Description" Member="Description" />
    </Type>
  </Table>
  <Table Name="Pet" Member="PetShop.Models.Pet">
    <Type Name="PetShop.Models.Pet">
      <Column Name="Id" Member="Id" IsDbGenerated="true" IsPrimaryKey="true" />
      <Column Name="Name" Member="Name" />
      <Column Name="Description" Member="Description" />
      <Column Name="ImageUrl" Member="ImageUrl" />
      <Column Name="Price" Member="Price" />
      <Column Name="CategoryId" Member="CategoryId" />
      <Association Name="FK_Pet_Category" Member="Category" ThisKey="CategoryId" OtherKey="Id" IsForeignKey="true" />
    </Type>
  </Table>
</Database>

2 个答案:

答案 0 :(得分:4)

  

我如何使用LoadWith?我没有在网上找到太多帮助。有什么好资源吗?

我在网上找到了这个:http://blogs.msdn.com/wriju/archive/2007/10/04/linq-to-sql-change-in-datacontext-from-beta-1-to-beta-2.aspx

您可以这样做:

var loadOption = new DataLoadOptions();           
loadOption.LoadWith<Pets>(p => p.Category);
db.LoadOptions = loadOption; 

var pets = from p in PetStoreContext.Pets
           select p;

然后您的宠物查询已经包含类别,因此当您尝试访问类别时,不会访问数据库。

答案 1 :(得分:1)

如果您使用LoadWith LoadOption,那么您的Pet查询将对类别进行急切加载,以便您能够执行

MyPet.Category.Name,不会产生额外的查询,因此您可以加入数据并强类型,而不会在Pet集合上循环或绑定时为类别运行多个查询。

或者您可以在Linq To SQL中使用存储过程,结果是强类型的。