gpt4 book ai didi

c# - 为什么 Azure Mobile Apps 的数据模型中有一个字符串 ID?

转载 作者:可可西里 更新时间:2023-11-01 09:11:35 26 4
gpt4 key购买 nike

我正在 Azure 移动应用程序中使用 C# 来尝试学习它们。我创建了模型以链接到我的 Azure SQL 数据库,创建了一个像这样的数据对象:

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; }

}

请注意,我在上面注释掉了 public int id;它在查询中给我一个重复的列错误。

最后,我使用新创建的帐户数据对象创建了一个 Controller 。

所以我运行了该应用程序并点击了“表/帐户”功能,它返回了零行(但是有数据,我可以向我在 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(必须是我的),另一个 id 是字符串,我不知道它来自哪里。

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

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

我在想我没有从该调用中取回任何数据的问题/原因是存在数据不匹配。

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

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


更新

我弄清楚了模型优先和 Azure 发生了什么,以及如何将 Azure 中的现有数据库附加到新代码。我将在这里发布它,希望它能节省其他人的时间。这真的应该更容易做到。我(目前)还不是 codefirst 的粉丝,因为我喜欢手动控制数据库...所以这让我更容易使用数据库后端。

首先,我创建了一个新项目(Azure 移动应用程序),然后在模型下,我右键单击该模型并添加->新实体数据模型,然后在 azure 数据库名称、密码中添加,并将我的“用户创建的配置文件名称”作为下面使用。必须在 web.config 中编辑此连接,如下所示。

然后我必须在 DataObjects 中为表创建模型(没有 MS 所需的列)并从数据对象创建一个 Controller 。然后我不得不编辑 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 - 用作数据库分区的键以优化读取,但在其他情况下未使用)
  • 版本(一个字节[] - 时间戳 - 用于乐观并发/冲突解决)
  • 已删除( bool 值 - 用于在删除记录时更新其他客户端 - 称为软删除)。

您的客户端需要其客户端模型中的所有这些字段,但 Deleted 除外(除非请求,否则不会传输,并通过移动应用 SDK 自动处理,以清除已删除记录的离线同步)。

您还没有说后端或前端使用的是什么语言。但是,日志记录在这两种情况下都可用 - 您只需打开它,捕获异常等。一些引用资料:

关于c# - 为什么 Azure Mobile Apps 的数据模型中有一个字符串 ID?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38231279/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com