Esempio n. 1
0
    /// <summary>
    /// 转为存取器描述符。
    /// </summary>
    /// <param name="extension">给定的 <see cref="AccessorDbContextOptionsExtension"/>。</param>
    /// <param name="accessor">给定的 <see cref="AbstractContextAccessor"/>。</param>
    /// <returns>返回 <see cref="AccessorDescriptor"/>。</returns>
    public static AccessorDescriptor ToDescriptor(this AccessorDbContextOptionsExtension extension,
                                                  AbstractContextAccessor accessor)
    {
        // 默认使用存取器定义的优先级属性值
        var priority   = extension.Priority < 0 ? accessor.Priority : extension.Priority;
        var algorithms = extension.Algorithm ?? accessor.CoreOptions.Algorithm;

        return(new AccessorDescriptor(accessor, extension.ServiceType !, extension.Group,
                                      extension.Access, extension.Pooling, priority, algorithms, extension.Sharded));
    }
Esempio n. 2
0
    /// <summary>
    /// 对使用 <see cref="EncryptedAttribute"/> 的属性应用加密功能。
    /// </summary>
    /// <param name="mutableEntityType">给定的 <see cref="IMutableEntityType"/>。</param>
    /// <param name="converterFactory">给定的 <see cref="IEncryptionConverterFactory"/>。</param>
    /// <param name="accessor">给定的 <see cref="AbstractContextAccessor"/>。</param>
    /// <returns>返回 <see cref="IMutableEntityType"/>。</returns>
    public static IMutableEntityType UseEncryption(this IMutableEntityType mutableEntityType,
                                                   IEncryptionConverterFactory converterFactory, AbstractContextAccessor accessor)
    {
        var encryptedProperties = mutableEntityType.ClrType.GetProperties()
                                  .Where(p => Attribute.IsDefined(p, _encryptedAttributeType));

        foreach (var property in encryptedProperties)
        {
            var converter = converterFactory.GetConverter(accessor, property.PropertyType);
            mutableEntityType.GetProperty(property.Name).SetValueConverter(converter);
        }

        return(mutableEntityType);
    }