大佬教程收集整理的这篇文章主要介绍了使用 cosmosdb sql sdk 先不使用 TTL 再使用 TTL 创建 cosmos 集合的最佳方法,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我们在 PRODUCTION 上的应用程序使用存储库类来创建数据库,如果不存在集合,然后保存和查询文档。这个课程在 PRODUCTION 上按预期工作,没有问题。请注意,在当前的 PROD 数据库中,我们有大约 15 个不同的集合,并且这些模型中的任何一个都未启用 TTL,因为没有业务要求。
现在我们想在同一个数据库中创建几个全新的集合,但通过将 -1 指定为 TTL 来启用 TTL 并保存具有各自 TTL 值的文档。为了实现这一点,可以修改下面的类,但它会破坏 OCP/SolID 原则,并且在 liVE 应用程序中这样做是有风险的
因此希望使用继承或组合扩展以下类,以便现有功能不会中断,并且我们能够支持在新集合及其相应文档上启用 TTL 的新要求。任何想法或建议以最好的方式做到这一点?请
public class Repository<T> : IRepository<T> where T : new()
{
private Readonly String _collectionname;
private Readonly String _dbname;
private Readonly RepositoryConfig _config;
private Readonly AsyncLazy<IdocumentClIEnt> _clIEnt;
private Readonly AsyncLazy<documentCollection> _collection;
private Readonly AsyncLazy<Database> _database;
public Repository()
{
_collectionname = typeof(T).name.TolowerInvariant();
_dbname = "Databasename";
_clIEnt = new AsyncLazy<IdocumentClIEnt>(() =>
{
return new documentClIEnt(new Uri("Uri"),"ID");
});
_database = new AsyncLazy<Database>(async () =>
{
var database = await _clIEnt.CreateDatabasequery()
.Where(db => db.ID == _dbName).AsEnumerable().FirstOrDefault();
if (database == null)
{
var newDatabase = new Database { ID = _dbname };
database = await _clIEnt.CreateDatabaseAsync(newDatabasE);
}
return database;
});
_collection = new AsyncLazy<documentCollection>(async () =>
{
var docclIEnt = await _clIEnt;
var docDB = await _database;
var documentCollection = docclIEnt.CreatedocumentCollectionquery(docDB.Selflink)
.Where(a => a.ID == _collectionName).AsEnumerable().FirstOrDefault();
if (documentCollection == null)
{
documentCollection newCollection = new documentCollection();
newCollection.ID = _collectionname;
newCollection.PartitionKey.Paths.Add(Constants.DataStore.CollectionPartitionKey);
documentCollection = await docclIEnt.CreatedocumentCollectionAsync(docDB.Selflink,newCollection);
}
return documentCollection;
});
}
public async Task<T> GetDocByIDAsync(String ID)
{
var db = await _database;
var coll = await _collection;
var clIEnt = await _clIEnt;
var documentUri = UriFactory.CreatedocumentUri(db.ID,coll.ID,ID);
var response = await clIEnt.ReaddocumentAsync(documentUri,new requestoptions { PartitionKey = new PartitionKey(ID) });
return (T)(dynamiC)response.resource;
}
public async Task CreateOrupdateAsync(T model)
{
var db = await _database;
var coll = await _collection;
var clIEnt = await _clIEnt; ;
await _clIEnt.UpsertdocumentAsync(_collection.Selflink,model);
}
}
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)
以上是大佬教程为你收集整理的使用 cosmosdb sql sdk 先不使用 TTL 再使用 TTL 创建 cosmos 集合的最佳方法全部内容,希望文章能够帮你解决使用 cosmosdb sql sdk 先不使用 TTL 再使用 TTL 创建 cosmos 集合的最佳方法所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。