3

Ive сталкивается с серьезной проблемой.Использование поставщика членства ASP.NET 4.0 с Azure Mobile Services

Я строю систему, которая создает веб-приложение ASP.NET 4> Azure SQL> Azure Mobile Service> приложение для Windows Phone 8. Данные вводятся на веб-сайт, который уже размещен на azure и в котором используется поставщик членства и, следовательно, его таблицы по умолчанию. Эти данные уже сохранены на Azure SQL db.

Мое основное препятствие Azure Mobile Services требует, чтобы каждый из них на нем имел свой первичный ключ, называемый «id» - нижний регистр! Сумасшедший, на мой взгляд. И, конечно же, у Членского Провайдера есть разные имена для ПК.

Вопрос: Должен ли я перепроектировать все мое приложение ASP.NET (много времени n) для использования CUSTOM Membership (с PK coloum с именем «id») или попытаться найти способ попытаться изменить имя столбца на лету на «id» (не знаю, как!). У кого-нибудь есть предложения? Очень ценится заранее.

ответ

1

Я не думаю, что использование Azure Mobile Services должно заставить вас переработать всю существующую архитектуру. Это, как говорится, два возможных решения, которые вы могли бы попробовать.

Первый - фактически не использовать классы EntityData Azure Mobile Service - для использования AMS необязательно наследовать от EntityData в orer. Вам нужно наследовать EntityData, если вы хотите использовать TableController, что, вероятно, хорошая идея, поскольку оно предоставляет вам множество встроенных функций, но вы можете использовать простой ApiController и ваши текущие модели.

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

Вот какая-то связь с подробной информацией о DTO: What is Data Transfer Object? Create Data Transfer Objects (DTOs)

Возможным implmentation:

Давайте предположим, что у вас есть следующие модели:

public class MyUser 
{ 
    public int MyId 
    { 
     get; 
     set; 
    } 

    public string SomeOther 
    { 
     get; 
     set; 
    } 
} 

Как вы отметили если вы хотите использовать эту модель с AMS, вам нужно использовать свойство Id вместо MyId. Если вы хотите сохранить нетронутый MyUser вы можете ввести следующий класс:

public class MyUserDTO : EntityData 
{ 
    public string SomeOther 
    { 
     get; 
     set; 
    } 
} 

Теперь ваша служба будет использовать MyUserDTO, который как прокси-сервер для вашей оригинальной модели. Проблема, которую вы должны решить, заключается в том, что вы должны конвертировать между MyUserDTO и MyUser. Если ваши модели просты, и у вас нет сложных иерархий, что было бы довольно легко. Если у вас сложные модели DTO, возможно, не правильный подход. Automapper - это инструмент, который может помочь вам в сопоставлении модели с DTO и наоборот.

Тем не менее, у меня нет большой информации о вашей архитектуре, и использование DTOs может оказаться неприемлемым.

Смежные вопросы