EFcoreExtension
All checks were successful
Publish NuGet packages / publish (push) Successful in 1m15s
All checks were successful
Publish NuGet packages / publish (push) Successful in 1m15s
This commit is contained in:
20
QWERTYkez.Mensura/Extensions/EFCoreExtension.cs
Normal file
20
QWERTYkez.Mensura/Extensions/EFCoreExtension.cs
Normal file
@@ -0,0 +1,20 @@
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
|
||||
|
||||
namespace QWERTYkez.Mensura.Extensions;
|
||||
|
||||
public static partial class EFCoreExtension
|
||||
{
|
||||
/// <summary>
|
||||
/// Регистрирует ValueConverter для всех типов, реализующих IMensuraUnit.
|
||||
/// </summary>
|
||||
public static void UseMensuraUnits(this ModelConfigurationBuilder configurationBuilder)
|
||||
{
|
||||
AddGeneratedConverters(configurationBuilder);
|
||||
AddGeneratedComplexConverters(configurationBuilder);
|
||||
}
|
||||
|
||||
internal class MensuraUnitConverter<U>()
|
||||
: ValueConverter<U, double>(unit => unit.ToDouble(), value => value.ToUnit<U>())
|
||||
where U : struct, IMensuraUnit, IEquatable<U> { }
|
||||
}
|
||||
@@ -9,7 +9,7 @@ internal class ListMimic<T>
|
||||
}
|
||||
|
||||
[StructLayout(LayoutKind.Explicit, Size = 16)]
|
||||
public struct NullableDoubleMimic
|
||||
internal struct NullableDoubleMimic
|
||||
{
|
||||
[FieldOffset(0)] public bool HasValue;
|
||||
[FieldOffset(8)] public double Value;
|
||||
|
||||
@@ -10,10 +10,18 @@
|
||||
<NoWarn>1701;1702;IDE1006</NoWarn>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\QWERTYkez.Mensura.Generator\QWERTYkez.Mensura.Generator.csproj" OutputItemType="Analyzer" ReferenceOutputAssembly="false" />
|
||||
<InternalsVisibleTo Include="QWERTYkez.Mensura.Tests" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Newtonsoft.Json" Version="13.0.1" PrivateAssets="All" />
|
||||
<ProjectReference Include="..\QWERTYkez.Mensura.Generator\QWERTYkez.Mensura.Generator.csproj" OutputItemType="Analyzer" ReferenceOutputAssembly="false" />
|
||||
<InternalsVisibleTo Include="QWERTYkez.Mensura.Tests" />
|
||||
<PackageReference Include="Microsoft.EntityFrameworkCore" Version="6.0.36" Condition="'$(TargetFramework)' == 'net6.0'" PrivateAssets="All" />
|
||||
<PackageReference Include="Microsoft.EntityFrameworkCore" Version="7.0.20" Condition="'$(TargetFramework)' == 'net7.0'" PrivateAssets="All" />
|
||||
<PackageReference Include="Microsoft.EntityFrameworkCore" Version="8.0.28" Condition="'$(TargetFramework)' == 'net8.0'" PrivateAssets="All" />
|
||||
<PackageReference Include="Microsoft.EntityFrameworkCore" Version="9.0.17" Condition="'$(TargetFramework)' == 'net9.0'" PrivateAssets="All" />
|
||||
<PackageReference Include="Microsoft.EntityFrameworkCore" Version="10.0.9" Condition="'$(TargetFramework)' == 'net10.0'" PrivateAssets="All" />
|
||||
</ItemGroup>
|
||||
|
||||
</Project>
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,70 +1,70 @@
|
||||
#if DEBUG
|
||||
namespace QWERTYkez.Mensura.Units;
|
||||
//#if DEBUG
|
||||
//namespace QWERTYkez.Mensura.Units;
|
||||
|
||||
/// <summary>
|
||||
/// Base value is MilliMeters
|
||||
/// </summary>
|
||||
[DebuggerDisplay("mm = {_MilliMeters.ToString(\"0.###\")}, m = {Meters.ToString(\"0.###\")}")]
|
||||
public readonly partial record struct XXXXXXXX
|
||||
{
|
||||
public static XXXXXXXX MilliMeter { get; } = new(1);
|
||||
[NotMapped, JsonIgnore, IgnoreDataMember] public double _MilliMeters { get => _Value; init => _Value = value; }
|
||||
///// <summary>
|
||||
///// Base value is MilliMeters
|
||||
///// </summary>
|
||||
//[DebuggerDisplay("mm = {_MilliMeters.ToString(\"0.###\")}, m = {Meters.ToString(\"0.###\")}")]
|
||||
//public readonly partial record struct XXXXXXXX
|
||||
//{
|
||||
// public static XXXXXXXX MilliMeter { get; } = new(1);
|
||||
// [NotMapped, JsonIgnore, IgnoreDataMember] public double _MilliMeters { get => _Value; init => _Value = value; }
|
||||
|
||||
|
||||
public static XXXXXXXX CentiMeter { get; } = new(XXXXXXXXConv.CentiMeters.To(1));
|
||||
[NotMapped, JsonIgnore, IgnoreDataMember]
|
||||
public double CentiMeters
|
||||
{
|
||||
get => XXXXXXXXConv.CentiMeters.From(_Value);
|
||||
init
|
||||
{
|
||||
_Value = XXXXXXXXConv.CentiMeters.To(value);
|
||||
}
|
||||
}
|
||||
// public static XXXXXXXX CentiMeter { get; } = new(XXXXXXXXConv.CentiMeters.To(1));
|
||||
// [NotMapped, JsonIgnore, IgnoreDataMember]
|
||||
// public double CentiMeters
|
||||
// {
|
||||
// get => XXXXXXXXConv.CentiMeters.From(_Value);
|
||||
// init
|
||||
// {
|
||||
// _Value = XXXXXXXXConv.CentiMeters.To(value);
|
||||
// }
|
||||
// }
|
||||
|
||||
public static XXXXXXXX DeciMeter { get; } = new(XXXXXXXXConv.DeciMeters.To(1));
|
||||
[NotMapped, JsonIgnore, IgnoreDataMember]
|
||||
public double DeciMeters
|
||||
{
|
||||
get => XXXXXXXXConv.DeciMeters.From(_Value);
|
||||
init => _Value = XXXXXXXXConv.DeciMeters.To(value);
|
||||
}
|
||||
// public static XXXXXXXX DeciMeter { get; } = new(XXXXXXXXConv.DeciMeters.To(1));
|
||||
// [NotMapped, JsonIgnore, IgnoreDataMember]
|
||||
// public double DeciMeters
|
||||
// {
|
||||
// get => XXXXXXXXConv.DeciMeters.From(_Value);
|
||||
// init => _Value = XXXXXXXXConv.DeciMeters.To(value);
|
||||
// }
|
||||
|
||||
public static XXXXXXXX Meter { get; } = new(XXXXXXXXConv.Meters.To(1));
|
||||
[NotMapped, JsonIgnore, IgnoreDataMember]
|
||||
public double Meters
|
||||
{
|
||||
get => XXXXXXXXConv.Meters.From(_Value);
|
||||
init => _Value = XXXXXXXXConv.Meters.To(value);
|
||||
}
|
||||
// public static XXXXXXXX Meter { get; } = new(XXXXXXXXConv.Meters.To(1));
|
||||
// [NotMapped, JsonIgnore, IgnoreDataMember]
|
||||
// public double Meters
|
||||
// {
|
||||
// get => XXXXXXXXConv.Meters.From(_Value);
|
||||
// init => _Value = XXXXXXXXConv.Meters.To(value);
|
||||
// }
|
||||
|
||||
public static XXXXXXXX KiloMeter { get; } = new(XXXXXXXXConv.KiloMeters.To(1));
|
||||
[NotMapped, JsonIgnore, IgnoreDataMember]
|
||||
public double KiloMeters
|
||||
{
|
||||
get => XXXXXXXXConv.KiloMeters.From(_Value);
|
||||
init => _Value = XXXXXXXXConv.KiloMeters.To(value);
|
||||
}
|
||||
// public static XXXXXXXX KiloMeter { get; } = new(XXXXXXXXConv.KiloMeters.To(1));
|
||||
// [NotMapped, JsonIgnore, IgnoreDataMember]
|
||||
// public double KiloMeters
|
||||
// {
|
||||
// get => XXXXXXXXConv.KiloMeters.From(_Value);
|
||||
// init => _Value = XXXXXXXXConv.KiloMeters.To(value);
|
||||
// }
|
||||
|
||||
|
||||
public XXXXXXXX AddMilliMeters(double value) => new(_Value + value);
|
||||
public XXXXXXXX AddCentiMeters(double value) => new(_Value + XXXXXXXXConv.CentiMeters.To(value));
|
||||
public XXXXXXXX AddDeciMeters(double value) => new(_Value + XXXXXXXXConv.DeciMeters.To(value));
|
||||
public XXXXXXXX AddMeters(double value) => new(_Value + XXXXXXXXConv.Meters.To(value));
|
||||
public XXXXXXXX AddKiloMeters(double value) => new(_Value + XXXXXXXXConv.KiloMeters.To(value));
|
||||
}
|
||||
// public XXXXXXXX AddMilliMeters(double value) => new(_Value + value);
|
||||
// public XXXXXXXX AddCentiMeters(double value) => new(_Value + XXXXXXXXConv.CentiMeters.To(value));
|
||||
// public XXXXXXXX AddDeciMeters(double value) => new(_Value + XXXXXXXXConv.DeciMeters.To(value));
|
||||
// public XXXXXXXX AddMeters(double value) => new(_Value + XXXXXXXXConv.Meters.To(value));
|
||||
// public XXXXXXXX AddKiloMeters(double value) => new(_Value + XXXXXXXXConv.KiloMeters.To(value));
|
||||
//}
|
||||
|
||||
|
||||
internal readonly struct XXXXXXXXConv
|
||||
{
|
||||
private XXXXXXXXConv(double multiplicator) => this.Multiplicator = multiplicator;
|
||||
public double To(double value) => value * Multiplicator;
|
||||
public double From(double value) => value / Multiplicator;
|
||||
public double Multiplicator { get; init; }
|
||||
public static XXXXXXXXConv MilliMeters { get; } = new(1);
|
||||
public static XXXXXXXXConv CentiMeters { get; } = new(10);
|
||||
public static XXXXXXXXConv DeciMeters { get; } = new(100);
|
||||
public static XXXXXXXXConv Meters { get; } = new(1000);
|
||||
public static XXXXXXXXConv KiloMeters { get; } = new(1000000);
|
||||
}
|
||||
#endif
|
||||
//internal readonly struct XXXXXXXXConv
|
||||
//{
|
||||
// private XXXXXXXXConv(double multiplicator) => this.Multiplicator = multiplicator;
|
||||
// public double To(double value) => value * Multiplicator;
|
||||
// public double From(double value) => value / Multiplicator;
|
||||
// public double Multiplicator { get; init; }
|
||||
// public static XXXXXXXXConv MilliMeters { get; } = new(1);
|
||||
// public static XXXXXXXXConv CentiMeters { get; } = new(10);
|
||||
// public static XXXXXXXXConv DeciMeters { get; } = new(100);
|
||||
// public static XXXXXXXXConv Meters { get; } = new(1000);
|
||||
// public static XXXXXXXXConv KiloMeters { get; } = new(1000000);
|
||||
//}
|
||||
//#endif
|
||||
Reference in New Issue
Block a user