Я решил это сам некоторое время назад. Я просто отвечаю на свой вопрос, если кому-то еще это понадобится.
Так какие же результаты должны возвращать хранимые процедуры? Это сильно зависит от типа отношения. Допустим, у нас есть две таблицы: TableOne
и TableTwo
.
1: 0..1 отношение
В этом случае хранимая процедура должна возвращать оба сразу:
select t1.*, t2.*
from TableOne t1
[left] join TableTwo t2
on t2.key = t1.key
Когда они равны 1: 1, вы можете легко опустить left
.
1: МНОГИЕ отношения
В этом случае гораздо проще написать хранимые процедуры, которые возвращают больше результатов. Начиная с тех, кто на стороне один , поэтому они будут подготовлены, когда вы связываете много приставной стол.
/* relation one */
select *
from TableOne
/* relation many */
select *
from TableTwo
Но если вы все еще хотите вернуть один набор результатов, вы должны проверить для каждой записи, загружен ли уже определенный объект. Есть метод FindOrAttach (), который может вам помочь. Таким образом, каждый результат будет возвращать обе сущности, и вы должны проверить, загружены ли они. Если нет, материализуйте ... Но, как уже упоминалось, гораздо проще вернуть два набора результатов.
МНОГИЕ: МНОГИЕ отношения
Вы также должны написать свою хранимую процедуру, чтобы получить больше результатов. В данном случае 3 из них.
/* first table */
select *
from TableOne
/* second table */
select *
from TableTwo
/* relation *:* */
select *
from TableOne2Table2
Выполните материализацию первых двух таблиц, как обычно, а затем вызовите Attach для каждой записи из результатов их загрузки с помощью ключей из TableOne и TableTwo. Это также заполняет свойства навигации набора сущностей.
Я дома, это поможет другим, как это помогло мне.