0

假设我创建了一个模型

public class Foo :TableEntity {
   public int OriginalProperty {get;set;}
}

然后,我部署了一个服务,该服务使用类似于...的代码定期更新 OriginalProperty 的值。

//use model-based query
var query = new TableQuery<Foo>().Where(…); 

//get the (one) result 
var row= (await table.ExecuteQueryAsync(query)).Single() 

//modify and write it back
row.OriginalProperty = some_new_value;
await table.ExecuteAsync(TableOperation.InsertOrReplace(row));

稍后,我决定向 Foo 添加一个新属性以供其他服务使用。

public class Foo :TableEntity {
   public int OriginalProperty {get;set;}
   public int NewProperty {get;set;}
}

我在本地进行此更改并开始从我的本地计算机更新一些记录,而不更新原始部署的服务

我看到的行为是,一旦部署的服务更新记录,我从本地计算机对 NewProperty 所做的更改就会丢失。当然,这在某些方面是有道理的。该服务不知道 NewProperty 已添加并且没有理由保留它。但是我的理解是 TableEntity 实现是基于字典的,所以我希望它会“忽略”(即保留)新引入的列而不是删除它们。

有没有办法配置查询/插入以获得我想要的行为?我知道DynamicTableEntity但尚不清楚将其用作基类是否会导致模型属性的行为发生变化。

为了清楚起见,我并不是说不断摆弄模型或为同一个表拥有多个客户端模型是一个好习惯,但是能够偶尔添加一列而不必担心重新部署每个列绝对有用可能触及受影响表的服务。

4

1 回答 1

1

您可以使用 InsertOrMerge 代替 InsertOrReplace。

于 2019-11-17T22:29:14.767 回答