假设我创建一个模型
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。