Использование отношения / внешнего ключа с linq2sql? - PullRequest
1 голос
/ 22 августа 2009

Кто-нибудь может помочь?

У меня есть созданная связь между таблицами Reservation (prim key) и Insurance (для ключа), которые были импортированы в linq2sql, и проверил мои автоматически созданные файлы c # и, конечно же, у меня есть booking.MyFieldNames и т. Д. мои отношения, но бронирование. Страхование Я не вижу полевых имен страховки - я что-то упустил?

Должен ли я позвонить в GetInsurances или как? Я ничего не вижу .. На самом деле страхование имеет тип Linq.entityset ???

Также я надеялся создать свою таблицу бронирования (которая была удобной и простой), а затем автоматически «ВСТАВИТЬ» страховку (то есть от 1 до многих) из Ilist или что-то в этом роде.

Разве это невозможно,

Любая помощь действительно ценится

p.s. Я создал свои автоматически созданные файлы c # dto через T4 Toolbox, но это не должно иметь никакого значения. У меня просто есть отдельный файл для каждой сущности ..

1 Ответ

4 голосов
/ 22 августа 2009

Не уверен на 100%, что вы подразумеваете под словом «я ничего не вижу».

Предполагая, что у вас есть таблица Reservations и таблица Insurance, которая ссылается на «резервирование» - что это за отношения? 1: 1? 1: много? Какой путь? Можете ли вы опубликовать скриншот вашей дизайнерской поверхности DBML? (загрузить его на www.tinypic.com и включить ссылку в качестве изображения здесь в свой вопрос)?

Класс «Бронирование» будет содержать один экземпляр объекта «Страхование» (EntityRef<Insurance>) или список (EntitySet) объектов «Страхование» (EntitySet<Insurance>) - в зависимости от характера отношений - и вам следует уметь ориентироваться в коде, например,

string foo =  myReservation.Insurance.CustomerName; // or whatever 

Вы не увидите их на дизайнерской поверхности - это просто ссылка на другой класс, который был на вашей дизайнерской поверхности, верно?

То же самое можно сказать и об обратном - если страховка связана только с одним резервированием, вы должны (в коде) выполнить:

 string bar = myInsuranceObject.Reservation.MyFieldName1; // or whatever

Так что мне не совсем понятно, на какой случай вы на самом деле ссылаетесь - не могли бы вы подробнее остановиться на вашем вопросе и прояснить его?

На основе образца NerdDinner я попытаюсь уточнить. Ознакомьтесь с дизайном DBML:

alt text

Здесь вы не видите никаких свойств, используемых для перемещения назад и вперед между объектами. Но вы видите, что у класса «RSVP» есть внешний ключ «DinnerID», который связывает его с классом «Dinner». Так что это отношение 1: n: один ужин имеет n RSVP, и каждый RSVP рассчитан только на один ужин.

В вашем коде вы видите эти созданные свойства сейчас - сначала проверьте класс RSVP:

alt text

Вы можете видеть, что класс RSVP имеет EntityRef<Dinner> - ссылку (ссылку) ровно на один Dinner - тот ужин, для которого предназначен этот RSVP.

С другой стороны, у класса Dinner есть полный список RSVP всех гиков, планирующих посетить этот ужин!

alt text

Таким образом, в классе Dinner у вас есть EntitySet<RSVP> - целый список участников, по которому вы можете перемещаться при работе с вашим классом Dinner.

Это немного проясняет ситуацию?

Марк

...