Linq To Sql один ко многим - PullRequest
       15

Linq To Sql один ко многим

1 голос
/ 04 августа 2011

Скажем, у меня есть 3 таблицы: Cars, Persons, CarOwners.

Cars - это просто таблица автомобилей, а Persons - разные люди, которые могут владеть автомобилями.CarOwners имеет отношения CarId и PersonId и CarOwnerId PK.

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

var cars = person.CarOwners.Select(c=> c.Car);

Но я бы хотел иметь возможность:

var cars = person.Cars;

Возможно ли это вообще??Дополнительный шаг довольно раздражает.

Ответы [ 2 ]

4 голосов
/ 04 августа 2011

Вы можете просто создать новое свойство на Person:

public partial class Person
{
    public IEnumerable<Car> Cars
    {
        get { return this.CarOwners.Select(c => c.Car); }
    }
}

Или обновите до Entity Framework, где вы можете отделить логическую модель от физической модели.

1 голос
/ 04 августа 2011

Попробуйте удалить CarOwnerId из CarOwners в вашей базе данных sql. Затем выберите CarId и PersonId в режиме конструктора в SSMS (используя клавишу Shift), щелкните правой кнопкой мыши и выберите «Установить первичный ключ».

В EF 4 вы получите только навигационные клавиши в вашей модели (вы можете использовать: Person.Cars и Car.Persons). Не уверен насчет L2S.

...