3

我遇到了一个大问题。

我正在构建一个使用 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” (不知道怎么做!)。有人有什么建议吗?非常感谢提前。

4

1 回答 1

1

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

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

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

以下是有关 DTO 的更多信息的链接: 什么是数据传输对象? 创建数据传输对象 (DTO)

一个可能的实现:

假设您有以下模型:

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 可能不太合适。

于 2014-10-27T17:52:42.793 回答