为什么在MobileServiceSQLiteStore数据库中createdAt,deleted和updatedAt列为null?

时间:2016-09-19 16:45:43

标签: .net sqlite azure uwp azure-mobile-services

我使用Azure移动应用服务在UWP应用程序和Azure之间同步数据。我使用MobileServiceSQLiteStore类来设置本地Sqlite存储以在本地保存数据,使用MobileServiceClient类将本地更改同步到Azure,所有这些都按照Azure的快速入门进行。

我的问题是,当我使用InsertAsync方法将数据存储到本地SqlLite存储时,不会填充存储中的createdAt,updatedAt和deleted列。正在按预期填充所有其他列。这些是框架在我的模型上所期望的标准列,我已按建议注释它们(例如[CreatedAt])

链接的问题突出了同样的问题,但对于android,以及我已经在做的建议答案,所以没有帮助:Azure Mobile Services Android Offline Example - "createdAt","updatedAt" columns empty

有人能帮忙吗?

这是我的代码:

using System;
using Microsoft.WindowsAzure.MobileServices;
using Microsoft.WindowsAzure.MobileServices.SQLiteStore;

namespace Test
{
    public class SyncManagerTest
    {
        public SyncManagerTest()
        {
            var client = new MobileServiceClient(@"https://remote.azurewebsites.net");

            var store = new MobileServiceSQLiteStore("test.db");

            store.DefineTable<Model>();

            client.SyncContext.InitializeAsync(store);

            var table = client.GetSyncTable<Model>();

            table.InsertAsync(new Model
            {
                Name = "Test",
                AnotherDate = DateTimeOffset.Now,
                AnotherBool = true
            });
        }
    }

    public class Model
    {
        [CreatedAt]
        public DateTimeOffset? CreatedAt { get; set; } = DateTimeOffset.Now;

        [Deleted]
        public bool Deleted { get; set; } = false;

        public string Id { get; set; }
        public string Name { get; set; }
        public DateTimeOffset AnotherDate { get; set; }
        public bool AnotherBool { get; set; }
        [UpdatedAt]
        public DateTimeOffset? UpdatedAt { get; set; } = DateTimeOffset.Now;
    }
}

以下是数据库中的结果记录:

Database record screenshot

更新 使用dotPeek查看InsertAsync的代码后,我发现:

JObject jobject = await this.<>n__1(MobileServiceSyncTable.RemoveSystemPropertiesKeepVersion(serializer.Serialize((object) instance) as JObject));

RemoveSystemPropertiesKeepVersion方法正在从写入数据库的JObject中删除createdAt,updatedAt和deleted属性。有谁知道为什么这样做?我无法在数据库中的任何地方看到日期信息保存在数据库上的操作,同步如何工作?甚至Sqlite数据库中框架创建的__operations元数据表也不包含每个操作的日期。

1 个答案:

答案 0 :(得分:1)

createdAt和updatedAt字段由数据库更新,而不是由您更新。如果您将记录推送到服务器,它们将为您填充。