Зависимость таблицы 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>

person Elijah Manor    schedule 08.10.2008    source источник


Ответы (2)


Как мне использовать 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;

И тогда ваш запрос домашних животных уже будет включать категорию, поэтому при попытке доступа к категории не произойдет обращения к базе данных.

person Giovanni Galbo    schedule 08.10.2008
comment
Не лучше ли использовать loadOption.LoadWith(p =› p.Category)? - person csgero; 08.10.2008

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

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

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

person Giovanni Galbo    schedule 08.10.2008
comment
Ааа, мне нравится вариант LoadWith... Надо поискать. Я бы хотел, чтобы MyPet.Category.Name загружался. Спасибо - person Elijah Manor; 08.10.2008
comment
Как мне использовать LoadWith? Я не нахожу много помощи в Интернете. Любые хорошие ресурсы? - person Elijah Manor; 08.10.2008