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

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


person Mantzas    schedule 29.03.2013    source источник
comment
Не поймите меня неправильно, я люблю ef 5 и все миграции. Был там сделал это. Я хотел бы включить свой T-SQL в свой проект и выполнить немного старомодных хранимых процедур (я не чувствую себя нормально, чтобы вытащить, скажем, всего клиента из базы данных, а не только имя и фамилию). Возможно, чрезмерная оптимизация станет моей гибелью. Хороший, я надеюсь!!   -  person Mantzas    schedule 30.03.2013
comment
Хорошо, я вижу. Первый черновик вашего вопроса звучал как разглагольствование, из-за чего его закрыли, но теперь он выглядит намного лучше. Проголосовали за открытие.   -  person Gert Arnold    schedule 30.03.2013


Ответы (1)


Если вы создадите новое веб-приложение 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 была тщательно протестирована корпорацией Майкрософт и сообществом. По этим причинам я бы оставил его в покое. Код, касающийся безопасности, должен быть оставлен на усмотрение аккредитованных экспертов по безопасности [2].

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

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

=====› Шаг 1

В обозревателе решений Visual Studio откройте папку «Ссылки».

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

=====› Шаг 2

Откройте файл Filters/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

Открыть: Models/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();

С вашим щеголеватым эквивалентом кода — комментарии к коду говорят вам, что нужно реализовать.

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

И вуаля ;)

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

[2] Позвольте мне дать вам все мои стандартные предостережения относительно ваших собственных криптографических алгоритмов и систем безопасности: не делайте этого. Очень, очень легко создать системы безопасности, которые почти безопасны, но не совсем. Система безопасности, которая дает вам ложное ощущение безопасности, хуже, чем отсутствие системы безопасности вообще!
Eric Lippert, Legend

person FantasticJamieBurns    schedule 29.03.2013
comment
Спасибо Джейми. Кажется, вы правы. Все другие библиотеки, такие как WebSecurity, не имеют никакой зависимости от ef. - person Mantzas; 30.03.2013