Есть ли способ удалить зависимость по умолчанию от Entity Framework в MVC 4?

asp.net-mvc-4 dapper entity-framework

Вопрос

Есть ли способ удалить зависимость по умолчанию от Entity Framework в проекте ASP.NET MVC 4 и заменить его другой аналогичной технологией, такой как Dapper

Принятый ответ

Если вы создаете новое веб-приложение ASP.NET MVC 4 и выбираете «Интернет-приложение» в качестве шаблона проекта, вы заметите, что Entity Framework ссылается и используется как часть SimpleMembership. Тем не менее, существует очень небольшая зависимость от Entity Framework, и, вероятно, ее не стоит удалять.

Entity Framework, по-видимому, используется только для двух второстепенных задач

Первый способ использования Entity Framework - создать схему базы данных, необходимую для хранения данных членства. Создание схемы базы данных не является чем-то, что Dapper сделает для вас, и если вы удалите Entity Framework, вам придется вручную управлять изменениями в ваших моделях / базе данных.

Второй способ использования Entity Framework - это один метод под названием «ExternalLoginConfirmation» внутри стандартного «AccountController» как часть его интеграции OAuth. Он используется для регистрации новых пользователей, прошедших аутентификацию у внешнего поставщика (например, Facebook).

Мы можем сказать тогда, что SimpleMembership использует команды SQL, а не Entity Framework [1].

Поскольку SimpleMembership использует команды SQL, а не Entity Framework, он должен быть таким же быстрым, как сопоставимое решение Dapper для этой задачи. Кроме того, эта конфигурация SimpleMembership была широко протестирована Microsoft и сообществом. По этим причинам я оставил бы это в покое. Код, касающийся безопасности, должен быть предоставлен аккредитованным специалистам по безопасности [2].

Как удалить Entity Framework из нового веб-приложения ASP.NET MVC 4

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

=====> Шаг 1

В Visual Studio Solution Explorer откройте папку «Ссылки».

Щелкните правой кнопкой мыши на «EntityFramework» и выберите «Удалить».

=====> Шаг 2

Открытые фильтры / InitializeSimpleMembershipAttribute.cs

Удалите следующее:

using System.Data.Entity.Infrastructure;

а также

Database.SetInitializer<UsersContext>( null );

а также

using ( var context = new UsersContext() ) {
    if ( !context.Database.Exists() ) {
        // Create the SimpleMembership database without Entity Framework migration schema
        ( ( IObjectContextAdapter ) context ).ObjectContext.CreateDatabase();
    }
}

=====> Шаг 3

Открыть: Модели / AccountModels.cs

Удалите следующее:

public class UsersContext : DbContext {
    public UsersContext()
        : base( "DefaultConnection" ) {
    }

    public DbSet<UserProfile> UserProfiles {
        get;
        set;
    }
}

=====> Шаг 4

Открыть: Контроллеры / AccountController.cs

Найдите метод под названием «ExternalLoginConfirmation».

Замените следующее:

using ( UsersContext db = new UsersContext() ) {
    UserProfile user = db.UserProfiles.FirstOrDefault( u => u.UserName.ToLower() == model.UserName.ToLower() );
    // Check if user already exists
    if ( user == null ) {
        // Insert name into the profile table
        db.UserProfiles.Add( new UserProfile {
            UserName = model.UserName
        } );
        db.SaveChanges();

С вашим эквивалентным кодом dapper - комментарии к кодам сообщают вам, что нужно реализовать.

Вы должны полностью удалить этот и другие методы, если вы не используете OAuth.

И вуаля ;)

[1] «Все реализовано как вызовы SQL, а не требует хранимых процедур, представлений, агентов и уведомлений об изменениях».
Джон Галлоуэй, Microsoft

[2] «Позвольте мне дать вам всю мою стандартную предосторожность по поводу развертывания собственных криптографических алгоритмов и систем безопасности: нет. Очень просто создавать системы безопасности, которые почти не защищены. Система безопасности, которая дает вам ложное чувство безопасности хуже, чем никакой системы безопасности! "
Эрик Липперт, Легенда



Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow
Является ли этот КБ законным? Да, узнайте, почему
Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow
Является ли этот КБ законным? Да, узнайте, почему