Зависимость таблицы LINQ to SQL - PullRequest
3 голосов
/ 08 октября 2008

Если у меня есть две таблицы ... Категория и Pet.

Есть ли способ в LINQ to SQL сделать результат присоединенной карты запросов к другому строго типизированному классу (например, PetWithCategoryName), чтобы я мог строго передать его в MVC View?

У меня в настоящее время есть классы категории и питомца ... я должен сделать еще один?

Может быть, я что-то здесь упустил. Может ли кто-нибудь из вас просветить меня?

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 ]

4 голосов
/ 08 октября 2008

Как мне использовать 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 голос
/ 08 октября 2008

Если вы используете LoadWith LoadOption, то ваш запрос Pet будет загружать категории, поэтому вы сможете выполнить

MyPet.Category.Name без выполнения дополнительного запроса, поэтому данные будут объединены и строго типизированы без риска выполнения нескольких запросов для категорий при зацикливании или привязке к коллекции Pet.

Или вы можете использовать хранимые процедуры в Linq To SQL, результат строго типизирован.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...