Entity-Framwork-4 - доступ к свойству внешнего ключа, когда контекст отсутствует в представлении ASP.NET MVC2 - PullRequest
1 голос
/ 21 декабря 2010

У меня есть база данных с этой таблицей:

Customer
- ID
- Phone
- Cell
- Fax

PhoneList
- ID
- PrefixID
- Number

Prefix
- ID
- Number

Между клиентом каждого телефонного столбца и идентификатором PhoneList существует FK (и другой - от префикса ID до идентификатора префикса таблицы)

Я импортировал БД в файл edmx, используя VS2010. Я получил свойства PhoneList, PhoneList1, PhoneList2 - сгенерировано ( Q1: как изменить это на другие имена? ) В библиотеке классов модели ASP.NET MVC я получаю список клиентов, используя:

var Customers = from c в контексте. Клиенты выбирают c;

и отправьте результат контроллеру:

return CustomersTable.AsQueryable ();

Проблема - я могу получить доступ ко всем обычным свойствам Customer в VIEW, но как только я получаю доступ к PhoneList (автоматически сгенерированному, который представляет объект телефонного номера), я получаю эту ошибку - поскольку контекст модели давно исчез и закрыт в модели сторона:

The ObjectContext instance has been disposed and can no longer be used for operations that require a connection.

Q2: Как мне справиться с этой ситуацией - Как я могу убедиться, что данные, которые мне нужны, «остаются» / извлекаются из базы данных (и с другой стороны, другой FK, который мне не нужен) загружен - не загружается)

(Q2- это «реальный» вопрос, ответ на вопрос Q1 приветствуется ...)

Я работаю с ASP.NET MVC2, EF-4

Спасибо.

Ответы [ 2 ]

1 голос
/ 21 декабря 2010

Q1: вы должны иметь возможность редактировать имена с помощью редактора, который открывается в Visual Studio при двойном щелчке файла EDMX.

Q2: Либо оставляйте контекст открытым (если это вариант),или используйте доступный для вас метод Include (не помню, выключен ли он IDbSet или ObjectQuery.

1 голос
/ 21 декабря 2010

Вы не должны использовать классы Entity Framework внутри своих представлений. Вы должны определить и использовать модели представления. Модели представлений - это классы, специально разработанные для нужд данного представления. Таким образом, у вас может быть несколько моделей представлений из одной и той же модели (модели представлений являются подмножеством модели) или одна модель представлений, которая сопоставлена ​​с несколькими классами моделей (в этом случае модель представлений является надмножеством нескольких моделей). Таким образом, в основном у вас будет хранилище, которое позаботится о получении модели откуда-то (база данных, файл, удаленный сервис, ...), а затем преобразует эту модель в модель представления и передает эту модель представления в контроллер.

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

Затем вы должны украсить классы модели представления необходимыми атрибутами отображения, которые будут специфичны для данного представления. Вы можете использовать AutoMapper для конвертации между вашими моделями и просмотра моделей.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...