【发布时间】:2020-03-12 12:57:46
【问题描述】:
假设我创建了一个模型
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,但不清楚使用它作为基类是否会导致模型属性的行为发生变化。
为了清楚起见,我并不是说不断摆弄模型或为同一个表设置多个客户端模型是一个好习惯,但能够偶尔添加一个绝对有用的列,而不必担心重新部署可能触及受影响表的每个服务。
【问题讨论】:
-
用InsertOrMerge代替InsertOrReplace怎么样?
-
啊 - 错过了这个感觉有点愚蠢!这些问题stackoverflow.com/questions/45490528/… 和stackoverflow.com/questions/14685907/… 很好地描述了这一点。如果您想将此作为答案发布,我将很乐意投票。
标签: azure azure-table-storage azure-tablequery