0

Я только что преподаю себе MVC4 (сделал веб-форму в течение многих лет), а я разочарован - но не о MVC, который довольно хорош. Entity Framework is ... wellMVC 4 + Entity Framework 5 + Хранимые процедуры

Я использую VS2010.

Проблема

У нас есть реальная база данных, вы знаете, нормализуется, как внешние ключи и прочее. Но каждый пример, который я нахожу для Entity Framework, напрямую связан с таблицей, но у нас редко есть прямая таблица выпадающих списков выпадающих списков и т. Д. Все наши веб-интерфейс вызовов хита ХП (как старо школы бранных удалена!)

Я люблю архитектуру модели в MVC, где вы определяете атрибуты данных, поступающих из источника данных - Отображаемое имя, диапазоны, DATATYPE , и т. д. Поэтому я определенно хочу сохранить это.

Entity Framework и MVC не хотят хорошо играть в этом сенарио. Я создал свой файл edmx (только с SP), импортировал мою функцию для SP, все хорошо ... до сих пор.

Невозможно создать контроллер из edmx/designer. Введите имя контроллера, выберите MVC-контроллер с чтением с использованием EF, выберите класс модели, который является FuntionName_Result, а для контекста выберите имя ... Entities. FAIL Не удалось получить метаданные

OK, так что теперь я пытаюсь создать EF 5.x DbContext Generator, обновить имя файла и бум. У меня есть модель и контекст - теперь я могу сделать классный материал MVC, позволяет перестраивать сайт. ... о ужас - все было определено ранее.

Я попытался создать edmx в другой папке и/или удалить его после генератора DBContext, все еще не могу создать контроллер.

'blah' is not part of the specified 'Context' class, and the 'Context' class could not be modifed to add a 'DbSet' property to it. (For example, the 'Context' class might be in a compiled assembly.) 

Если я вручную добавить DBSet, я вернулся, чтобы не удалось извлечь метаданные - Я предполагаю, что это происходит потому, что он не может подключиться к БД. Я не знаю, где сказать, чтобы использовать строку подключения в web.config. - если это проблема

Здесь лежит мертвый мой MVC надежды на светлое будущее.

Что мне не хватает?

Я не женат на EF, поэтому, если есть лучший способ доступа к базам данных (без написания всего кода с нуля), я здесь, чтобы послушать.

Благодаря

ответ

1

Entity рамки в значительной степени зависит от соглашений. Потребуется немного, чтобы привыкнуть. Например, для строк подключения ... Если инфраструктура сущности не находит строку подключения с тем же именем, что и ваш класс DBcontext, она просто делает один (я думаю, что по умолчанию используется имя проекта в качестве имени базы данных). Если эта база данных не существует, она создаст ее локально как SQL-экспресс DB. Это приводит к таким ошибкам, как те, о которых вы сообщаете.

Если вы хотите определить строку соединения для фреймворка сущности, все, что вам нужно сделать, это предоставить строку соединения в файле web.config. Снова соглашения ... строка подключения должна быть названа так же, как ваш класс DBContext, а структура сущности просто найдет ее.

<connectionStrings> 
     <add name="MyDbContextClassName" connectionString="..." /> 
</connectionStrings> 

Замечания по архитектуре IMHO ORM вызывающе подходят для разработки новых приложений. Это упрощает получение данных в базу данных и из нее. Это говорит о сдвиге парадигмы большого Big, если вы привыкли получать доступ ко всем через sprocs и прямые запросы к БД. Не сдавайся. Сначала это расстроит вас так же, как собирать новые технологии, но в конце концов это стоит того.

Я использовал структуру сущности и nHibernate для ORM в прошлом. Вещь, которая мне нравится в инфраструктуре сущности, заключается в том, что если вы используете первую миграцию кода, большинство из очень раздражающих, утомительных и ошибочных сопоставлений столбцов автоматически генерируются для вас (снова используя соглашения). Иногда вам все равно приходится делать небольшое сопоставление, но эти случаи довольно редки. Может быть, немного реже, если у вас уже есть база данных, так как имена столбцов, вероятно, не всегда будут соответствовать соглашениям с инфраструктурой сущностей. В любом случае ... Это большой плюс в моей книге и почему я вызывающе поддерживаю EF над nHibernate.

+0

Не говоря уже о том, что EF 6 будет поддерживать Хранится Procs. Еще одна веская причина сделать толчок. – IronMan84

+0

Спасибо, Бен. На этом этапе я смог доставить данные из БД, используя код, созданный EF. Тем не менее, я сейчас смотрю на другие ОРМ - в частности, на PetaPOCO. –

+0

Так это ответ на ваш вопрос или нет? Если нет, пожалуйста, уточните, и я посмотрю, смогу ли я предоставить дополнительную помощь. –

0

Если у вас уже есть база данных с хранимыми процедурами, вам не нужен EF 5.X DbContext Generator. Создайте в своем проекте папку в своем проекте или новый проект для доступа к данным. В этой папке/проекте добавьте файл edmx и настройте его в существующую базу данных с помощью мастера. На этом этапе вы можете использовать хранимые процедуры.

Если вы открываете файл edmx, вы можете перейти на вкладку проводника модели и управлять импортированными функциями (хранимыми процедурами) и их типами возврата.

Как только у вас есть это. В вашем контроллере вместо использования экземпляра DbContext вы можете просто использовать экземпляр своих объектов EF. Поэтому, если вы вызвали ваш edmx 'MyDbAccess', вы сможете использовать MyDbAccessEntities, который затем позволит вам получить доступ к хранимым процедурам.

0

Я в вашем App.config файл проверить

<connectionStrings> 

После проверки, если ваши хранимые процедуры добавляются в файл контекста модель

YouDBModel.Context.tt 
    > YourBDModel.Context.cs