Управление профилями пользователей с помощью SimpleMembership/Sql Server CE, MongoDB

Я решил использовать mongodb как хранилище для данных, ориентированных на домен. Я искал official mongodb providers для интеграции их в проект ASP.NET MVC, чтобы сохранить одну базу данных приложений. Нет официальных провайдеров, и доступные не выглядят зрелыми/стабильными. Поэтому я решил использовать простое членство, как есть.

Как избавиться от Entity Framework -специфического кода, если возможно, от AccountController?

Как бы вы управляли профилями пользователей, имеющими как SimpleMembership UserProfile, так и mongodb User?

Пример

В отдельной сборке [project-name].domain есть два класса:

public class Event {
    public DateTime ScheduledDate { get; set; }
    public String Name { get; set; }
    public Location Location { get; set; }
}

public class User {
    public String Name { get; set; }
    public List<Events> AssociatedEvents { get; set; }
}

Будет ли это решением, если я добавлю UserProfileId в User?

public class User {
    public Int32 UserProfileId { get; set; }
    public String Name { get; set; }
    public List<Events> AssociatedEvents { get; set; }
}

Ответ 1

Вам нужна реализация AspNet.Identity для MongoDB для замены использования по умолчанию AspNet.Identity.EntityFramework в стандартном AccountController в ASP.NET MVC 5? Если да - возможно, это поможет вам - полностью реализовано MongoDB.AspNet.Identity.

Ответ 2

вам нужно использовать connectionString из appSetting.

Вам нужно будет загрузить вышеуказанную вилку, создать и изменить существующую ссылку на dll, чтобы использовать новую dll.

Тогда...

Используйте свою конфигурацию:

<appSettings>
   <add key="MONGOLAB_URL" value="mongodb://localhost/ASPNETDB"/>    
</appSettings>

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

<providers>
   <clear />
   <add name="MongoDBMembershipProvider" type="MongoDB.Web.Providers.MongoDBMembershipProvider" 
    applicationName="/"  appSettingsConnectionStringKey="MONGOLAB_URL" collection="Users"
        enablePasswordRetrieval="false" enablePasswordReset="true" requiresQuestionAndAnswer="false" requiresUniqueEmail="false"
        maxInvalidPasswordAttempts="5" minRequiredPasswordLength="6" minRequiredNonalphanumericCharacters="0" passwordAttemptWindow="10" />
</providers>

Итак, в приведенной выше конфигурации он имеет параметр appSettingsConnectionStringKey. Код внутри настраиваемого провайдера читает значение appSettingsConnectionStringKey "MONGOLAB_URL", а затем использует его для чтения ConfigurationManager.AppSettings [ "MONGOLAB_URL" ], и он, очевидно, ДОЛЖЕН соответствовать указанному имени ключа добавления.

[1]: https://github.com/osuritz

[2]: https://github.com/osuritz/MongoDB.Web/commit/b1e9534023ca8cb2e74eb1adbdcb1cd7dd693efa