我遇到了一个大问题。
我正在构建一个使用 ASP.NET 4 Web 应用程序 > Azure SQL > Azure 移动服务 > Windows Phone 8 应用程序的系统。数据被输入到已经托管在 azure 上的网站中,该网站使用了成员(member)提供程序及其默认表。此数据已成功存储在 Azure SQL 数据库上。
我的主要障碍是Azure移动服务要求其中的每个表都有一个名为“id”的主键 - 小写!在我看来很疯狂。当然,成员(member)资格提供商对 PK 有不同的名称。
问题 - 我应该重新设计我的整个 ASP.NET 应用程序(花费大量时间和精力)以使用自定义成员资格(PK 列名为“id”),还是尝试找到一种方法来尝试将列名称动态更改为“id”(不知道如何!)。有人有什么建议吗?非常感谢提前。
最佳答案
我认为使用 Azure 移动服务不应迫使您重新设计所有现有架构。话虽如此,您可以尝试两种可能的解决方案。
第一个是实际上不使用 Azure 移动服务的 EntityData 类 - 不强制从 EntityData 继承或使用 AMS。如果您想使用 TableController,您需要继承 EntityData,这可能是一个好主意,因为它为您提供了很多内置功能,但您可以选择使用普通的 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 可能不太合适。
关于azure - 将 ASP.NET 4.0 成员资格提供程序与 Azure 移动服务结合使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15575011/