我正在使用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; }
}
请注意,我注释掉了上面的public int id;它给了我一个关于查询的重复列错误。
最后,我使用新创建的Account DataObject创建了一个控制器。
所以我运行了应用程序并点击" tables / Account"函数,它返回零行(但有数据,我可以与我在天蓝色移动应用程序中使用的用户查询)。
然后我注意到了模型架构:
[
{
"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作为字符串,我不知道它来自哪里。
此外,在DB中,oGuid的类型为uniqueIdentifier;不是字符串。这可能是也可能不是问题,因为我还无法测试。
然后我的数据库中不存在其他列,包括CreatedAt(datetime),UpdatedAt(datetime),Version(字符串)和Deleted(bit)。
我认为我没有从该电话中获取任何数据的问题/原因是数据不匹配。
我是否需要在api测试中添加模型中列出的其他列?
我还测试了尝试调用/ table / Account / 3来加载特定帐户并且它没有返回任何行...我猜测它是模型不匹配但是我&#39 ;我不确定这是问题或其他原因造成的吗?我没有看到任何错误或警告。
更新
我想出了模型优先和Azure的内容以及如何将Azure中的现有数据库附加到新代码中。我打算在这里发帖,希望能节省其他时间。这真的应该更容易做到。我不喜欢codefirst(还),因为我喜欢手动控制数据库......所以这使我更容易使用数据库后端。
首先我创建了一个新项目(Azure移动应用程序)然后在模型下我右键单击模型并添加 - >新实体数据模型然后添加到azure db名称,密码并给它我的"用户创建个人资料名称"如下所示。必须在web.config中编辑此连接,如下所示。
然后,我必须在DataObjects中创建表的模型(没有MS必需的列),并从数据对象创建一个控制器。然后我必须编辑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中的connectionstring。
private const string connectionStringName = "Name=[user created preset name]";
并在OnModelCreating()下添加:
modelBuilder.Entity<Account>().ToTable("tblAccount");
其中Account是我在DataObjects中创建的模型(类),而tblAccount是AzureDB中的表名。
答案 0 :(得分:6)
EntityData抽象类包含其他字段 - 移动脱机同步有五个字段
您的客户端需要客户端模型中的所有这些字段,但Deleted除外(除非已请求,否则不会传输这些字段,并通过Mobile Apps SDK自动处理,以清除已删除记录的脱机同步)。
您还没有说过后端或前端使用的语言。但是,在两种情况下都可以使用日志记录 - 您只需打开它,捕获异常等等。一些参考资料: