如何将 EntityData 派生类默认字符串 Id 属性的主键更改为 int 属性?

Posted

技术标签:

【中文标题】如何将 EntityData 派生类默认字符串 Id 属性的主键更改为 int 属性?【英文标题】:How to change the primary key for a EntityData derived class default string Id property to an int property? 【发布时间】:2015-03-04 17:48:43 【问题描述】:

我最近开始学习 Azure 移动服务,我关注了 this tutorial 并且我的模型的类需要从 EntityData 类继承。

从EntityData source code 开始,已经定义了一个 Id 属性作为主键,但它被定义为字符串,它不适用于我使用 int 的模型。

我的班级是这样的:

public partial class Role : EntityData

    public Role()
    
        this.Users = new HashSet<User>();
    
    [Key]
    public int RoleId  get; set; 
    public string Title  get; set; 

    public virtual ICollection<User> Users  get; set; 

如果我尝试使用此类,我会收到一条错误消息,指出已定义 Id 属性。

有没有办法将不同的属性定义为主键?如果无法进行这种更改,有没有办法将此字符串 Id 属性用作增量主键?

【问题讨论】:

【参考方案1】:

最好的解决方案是使用自动映射器。这是一篇博客文章,概述了如何做到这一点,本质上你存储一个 int,但是当它通过网络发送时将它转换为一个字符串:

http://blogs.msdn.com/b/azuremobile/archive/2014/05/22/tables-with-integer-keys-and-the-net-backend.aspx

【讨论】:

哇,它比我想象的要简单得多,但是如何将它设置为自动递增?主要是因为当我尝试不发送它时,我收到一条错误消息,指出需要 Id 属性。 一个简单的问题,您共享的该页面中的示例处理具有主键的实体,但如果我正在处理同时具有主键和外键的实体,请执行我必须在我的 WebApiConfig 类中为它们中的每一个映射等效的 DTO 字符串? 理想情况下,是的。或者,您可以使用 Automapper 来扁平化关系。

以上是关于如何将 EntityData 派生类默认字符串 Id 属性的主键更改为 int 属性?的主要内容,如果未能解决你的问题,请参考以下文章

如何将工厂方法中的有效指针返回到基于底层操作系统的派生类

如何键入提示 Python 函数返回从超类派生的任何类的实例?

将派生类指针的向量传递给线程

C++:如何强制派生类设置基成员变量?

将ptr转换为派生类的ptr [重复]

如何将此“命令处理程序映射”从派生类重构为基类?