【问题标题】:Can Odata Metadata be cached in Distributed cache?Odata 元数据可以缓存在分布式缓存中吗?
【发布时间】:2020-11-18 06:34:26
【问题描述】:

有没有办法在分布式缓存中缓存元数据(EdmModel)?

我们有一个多租户系统,其中元数据可以根据客户端进行更改。我们目前正在为客户端构建元数据,然后将其缓存在内存中。构建此元数据的成本很高,因此我们必须对其进行缓存。

似乎无法使用二进制序列化对 EdmModel 进行序列化,然后使用 Redis 等分布式缓存对其进行缓存。

我有下面的代码来序列化模型,但是它不起作用。

IEdmModel model = GetEdmModel();
using (MemoryStream memorystream = new MemoryStream())
{
    BinaryFormatter bf = new BinaryFormatter();
    bf.Serialize(memorystream, model);  // Error is thrown here
    byte[] yourBytesToDb = memorystream.ToArray();
}

我收到以下错误

Type 'Microsoft.OData.Edm.EdmModel' in Assembly 
'Microsoft.OData.Edm, Version=7.7.1.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35' 
is not marked as serializable.

还有其他方法可以序列化模型吗?

【问题讨论】:

    标签: c# asp.net .net-core odata


    【解决方案1】:

    您可以尝试查看以下内容。

    https://docs.microsoft.com/en-us/odata/odatalib/edm/read-write-model

    private byte[] ConvertToBytes(IEdmModel model)
    {
        using (var memoryStream = new MemoryStream())
        {
            using (var writer = XmlWriter.Create(memoryStream))
            {
                IEnumerable<EdmError> errors;
                CsdlWriter.TryWriteCsdl(model, writer, CsdlTarget.OData, out errors);
            }
            return memoryStream.ToArray();
        }
    }
    
    private IEdmModel ConvertFromBytes(byte[] modelBytes)
    {
        using (var ms = new MemoryStream(modelBytes))
        {
            using (var reader = XmlReader.Create(ms))
            {
                IEnumerable<EdmError> errors;
                IEdmModel model;
                if (CsdlReader.TryParse(reader, out model, out errors))
                {
                    return model;
                }
                throw new InvalidOperationException($"Model Error: {string.Join(",", errors.Select(_ => _.ErrorMessage))}");
            }
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2012-06-15
      • 2011-02-15
      • 2014-10-26
      • 1970-01-01
      • 2021-05-16
      • 2014-12-26
      • 2012-03-15
      • 2011-03-11
      • 1970-01-01
      相关资源
      最近更新 更多