【问题标题】:LINQ to SQL Table DependencyLINQ to SQL 表依赖
【发布时间】:2010-09-15 23:22:24
【问题描述】:

如果我有两个表...类别和宠物。

在 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>

【问题讨论】:

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


    【解决方案1】:

    我将如何使用 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;
    

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

    【讨论】:

    • 不应该是loadOption.LoadWith(p => p.Category)吗?
    【解决方案2】:

    如果您使用 LoadWith LoadOption,那么您的 Pet 查询将对类别进行急切加载,这样您就可以做到

    MyPet.Category.Name 不会产生额外的查询,因此您将连接数据并进行强类型化,而不会在循环或绑定 Pet 集合时对类别运行多个查询。

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

    【讨论】:

    • 啊,我喜欢 LoadWith 选项...我必须寻找它。我希望加载 MyPet.Category.Name。谢谢
    • 我将如何使用 LoadWith?我在网上找不到太多帮助。有什么好的资源吗?
    猜你喜欢
    • 2010-12-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-17
    • 1970-01-01
    • 1970-01-01
    • 2010-10-19
    相关资源
    最近更新 更多