【问题标题】:Using ASP.NET 4.0 membership provider with Azure Mobile Services将 ASP.NET 4.0 成员资格提供程序与 Azure 移动服务一起使用
【发布时间】:2013-03-22 16:13:34
【问题描述】:

我遇到了一个大问题。

我正在构建一个使用 ASP.NET 4 Web 应用程序 > Azure SQL > Azure 移动服务 > Windows Phone 8 应用程序的系统。数据被输入到已经托管在 azure 上的网站中,该网站使用了成员资格提供程序,因此使用了默认表。此数据已成功存储在 Azure SQL db 上。

我的主要障碍是 Azure 移动服务 要求其上的每个表都将其主键称为“id” - 小写!在我看来很疯狂。当然,Membership Provider 对 PK 有不同的名称。

问题 - 我是否应该重新设计我的整个 ASP.NET 应用程序(花费大量时间和精力)以使用 CUSTOM 会员资格(使用名为“id”的 PK 列)或尝试找到一种方法来尝试将列名即时更改为“id”(不知道怎么做!)。有人有什么建议吗?非常感谢提前。

【问题讨论】:

    标签: azure asp.net-membership azure-sql-database azure-mobile-services


    【解决方案1】:

    我不认为使用 Azure 移动服务会促使您重新设计所有现有架构。话虽如此,您可以尝试两种可能的解决方案。

    第一个是实际上不使用 Azure 移动服务的 EntityData 类 - 为了使用 AMS,不需要从 EntityData 继承。您需要继承 EntityData 以防您想使用 TableController 这可能是一个好主意,因为它为您提供了许多内置功能,但您可以选择使用普通的 ApiController 和您当前的模型。

    另一种可能的解决方案是使用所谓的 DTO(数据传输对象),它可以帮助您保留当前架构,但仍然能够使用 AMS。

    以下是一些链接,其中包含有关 DTO 的更多信息: What is Data Transfer Object? Create Data Transfer Objects (DTOs)

    一种可能的实现方式:

    假设您有以下模型:

    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,反之亦然。

    不过,我没有太多关于您的架构的信息,使用 DTO 可能不太合适。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-11-06
      • 1970-01-01
      • 1970-01-01
      • 2012-09-19
      • 2012-10-02
      • 2022-01-24
      • 1970-01-01
      相关资源
      最近更新 更多