繁体   English   中英

为什么Azure移动应用程序的数据模型中有字符串ID?

[英]Why is there a string ID in the data model of Azure Mobile Apps?

我正在Azure移动应用中使用C#尝试学习它们。 我创建了模型以链接到我的Azure SQL DB,并创建了一个DataObject,如下所示:

public class Account : EntityData
{
    //public int id { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public string PhoneNumber { get; set; }
    public string Password { get; set; }
    public DateTime dtCreated { get; set; }
    public Guid oGuid { get; set; }

}

注意,我在上面注释掉了公共int id。 这给了我查询重复的列错误。

最后,我使用新创建的Account DataObject创建了一个控制器。

因此,我运行了该应用程序并单击了“表/帐户”功能,它返回了零行(但是有数据,我可以向在Azure移动应用程序中使用的用户查询它)。

然后,我注意到模型模式是这样的:

[
  {
    "id": 0,
    "FirstName": "string",
    "LastName": "string",
    "PhoneNumber": "string",
    "Password": "string",
    "dtCreated": "2016-07-06T17:45:47.114Z",
    "oGuid": "string",
    "Id": "string",
    "Version": "string",
    "CreatedAt": "2016-07-06T17:45:47.114Z",
    "UpdatedAt": "2016-07-06T17:45:47.114Z",
    "Deleted": true
  }
]

配置的模型有几个问题(而且我不知道某些列的来源...)

首先,该ID被列出两次,一次是int(必须是我的),另一次是字符串,我不知道它从何而来。

同样,在数据库中,oGuid的类型为uniqueIdentifier; 不是字符串。 这可能是问题,也可能不是问题,因为我还无法测试。

然后还有我的数据库中不存在的其他列,包括CreatedAt(日期时间),UpdatedAt(日期时间),Version(字符串)和Deleted(位)。

我在想为什么没有从该调用返回任何数据的问题/原因是数据不匹配。

我是否需要添加api测试中模型中列出的其他列?

我还测试过尝试调用/ table / Account / 3来加载特定帐户,并且它不返回任何行...我猜这是模型不匹配,但是我不确定这是问题还是其他原因它? 我没有看到任何错误或警告。


更新资料

我了解了模型优先和Azure的情况,以及如何将Azure中的现有数据库附加到新代码。 我将其发布在这里,希望它可以节省其他人的时间。 这确实应该更容易做到。 我还不喜欢使用代码优先(还),因为我想手动控制数据库...因此这使我使用数据库后端变得容易得多。

首先,我创建了一个新项目(Azure Mobile App),然后在模型下,我右键单击该模型并添加->新实体数据模型,然后添加了azure db名称,密码,并为其指定了“用户创建的配置文件名称”,如下所示。 如下所示,必须在web.config中编辑此连接。

然后,我不得不在DataObjects中创建表的模型(没有MS必需的列),并根据dataobject创建一个控制器。 然后,我不得不编辑web.config并设置一个非实体数据库连接字符串:例如:

<add name="[user created preset name]" providerName="System.Data.SqlClient" connectionString="Server=[Azuredb server connection];initial catalog=[DBName];persist security info=True;user id=[user];password=[pass];MultipleActiveResultSets=True"/>

最后,在MobileServiceContext中,我必须将DataObject模型映射到Azure sql中的表,并设置要使用的连接字符串,从默认的MS_TableConnectionString到web.config中的连接字符串。

    private const string connectionStringName = "Name=[user created preset name]";

在OnModelCreating()下,我添加了:

    modelBuilder.Entity<Account>().ToTable("tblAccount");

其中Account是我在DataObjects中创建的模型(类),而tblAccount是AzureDB中的表名。

EntityData抽象类包含其他字段-移动脱机同步有五个字段

  • ID(字符串-通常为GUID-必须是全局唯一的)
  • UpdatedAt(DateTimeOffset-通过数据库触发器自动维护-用于增量同步)
  • CreateAt(DateTimeOffset-用作进入数据库分区以优化读取的键,但未使用)
  • 版本(一个字节[]-时间戳记-用于乐观并发/冲突解决)
  • 删除(布尔值-用于在删除记录时更新其他客户端-称为软删除)。

您的客户端需要其客户端模型中的所有这些字段,但“已删除”(除非请求,否则不会传输,并且会通过Mobile Apps SDK自动处理以清除已删除记录的脱机同步)。

您还没有说后端或前端使用什么语言。 但是,在两种情况下都可以使用日志记录-您只需将其打开,捕获异常等即可。为您提供一些参考:

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM