В данный момент мне кажется, что это произойдет произвольно, когда это не удается. Вот мой случай.
Сущность Foo:
class Foo {
int FooID {get;set;
User Creator {get;set;}
Bar TheBar {get;set;}
DateTime CreatedDateTime {get;set;}
}
Пользователь сущности:
class User {
int UserID {get;set;}
ObjectWhatchamacallit Foos {get;set;}
DateTime LastLogInDateTime {get;set;}
}
So
return DB.ExecuteStoreQuery<Foo>("SELECT *,
Created AS CreatedDateTime,
LastLogIn AS LastLogInDateTime
FROM
[User]
JOIN Foo ON Foo.CreatorID = [User].UserID
JOIN Bar ON Foo.BarID = Bar.BarID",
"Foo");
прекрасно загрузит Foos, с Брусками, но не с Создателями.
return DB.ExecuteStoreQuery<User>("SELECT *,
Created AS CreatedDateTime,
LastLogIn AS LastLogInDateTime
FROM
[User]
JOIN Foo ON Foo.CreatorID = [User].UserID",
"User");
лучше не работает. Пользователи загружаются, но без Foo.
Может ли это быть потому, что
- псевдонимов в Foo и User?
- Пользователь является ключевым словом SQL? (Я пробовал алиасин [Пользователь] AS Creator, но безрезультатно)
- чего-то еще?
Обновление
Я снова и снова сталкиваюсь с этой проблемой. Я понял, что aliasing (1), вероятно, не имеет к этому никакого отношения. Пользователь, являющийся ключевым словом T-SQL (2), может быть проблемой в данном конкретном случае, но не часто встречается во всех случаях, когда у меня была эта проблема. Так что ответ на общий вопрос - это что-то еще (3).
Одна из проблем заключается в том, что некоторые имена отношений могли быть изменены по сравнению с теми, которые изначально предлагал edmx-дизайнер, в соответствии с именами столбцов ключей хранилища. Но для меня это швы произвольно в любом случае.
Итак, я снова задаю общий вопрос, указанный в заголовке, как именно EF делает вывод, что подмножество столбцов, возвращаемых запросом, на самом деле является частью связанной сущности?