/// <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)); }
/// <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); }