1
0

Added White-/Blacklist Attributes, DateOnly/TimeOnly converters, TcpClientMoq

This commit is contained in:
2022-06-15 19:48:47 +02:00
parent f331be521f
commit 65bca0a922
15 changed files with 570 additions and 16 deletions

View File

@@ -56,7 +56,7 @@
</ItemGroup>
<ItemGroup>
<PackageReference Include="Unclassified.NetRevisionTask" Version="0.4.2">
<PackageReference Include="Unclassified.NetRevisionTask" Version="0.4.3">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>

View File

@@ -0,0 +1,28 @@
#if NET6_0_OR_GREATER
using System;
using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
namespace AMWD.Common.EntityFrameworkCore.Converters
{
/// <summary>
/// Defines the conversion from a <see cref="DateOnly"/> object to a <see cref="DateTime"/> which can be handled by the database engine.
/// </summary>
/// <remarks>
/// As of 2022-06-04 only required for Microsoft SQL server on .NET 6.0.
/// </remarks>
public class DateOnlyConverter : ValueConverter<DateOnly, DateTime>
{
/// <summary>
/// Initializes a new instance of the <see cref="DateOnlyConverter"/> class.
/// </summary>
public DateOnlyConverter()
: base(
d => d.ToDateTime(TimeOnly.MinValue),
d => DateOnly.FromDateTime(d)
)
{ }
}
}
#endif

View File

@@ -0,0 +1,28 @@
#if NET6_0_OR_GREATER
using System;
using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
namespace AMWD.Common.EntityFrameworkCore.Converters
{
/// <summary>
/// Defines the conversion from a nullable <see cref="DateOnly"/> object to a nullable <see cref="DateTime"/> which can be handled by the database engine.
/// </summary>
/// <remarks>
/// As of 2022-06-04 only required for Microsoft SQL server on .NET 6.0.
/// </remarks>
public class NullableDateOnlyConverter : ValueConverter<DateOnly?, DateTime?>
{
/// <summary>
/// Initializes a new instance of the <see cref="NullableDateOnlyConverter"/> class.
/// </summary>
public NullableDateOnlyConverter()
: base(
d => d == null ? null : new DateTime?(d.Value.ToDateTime(TimeOnly.MinValue)),
d => d == null ? null : new DateOnly?(DateOnly.FromDateTime(d.Value))
)
{ }
}
}
#endif

View File

@@ -0,0 +1,28 @@
#if NET6_0_OR_GREATER
using System;
using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
namespace AMWD.Common.EntityFrameworkCore.Converters
{
/// <summary>
/// Defines the conversion from a nullable <see cref="TimeOnly"/> object to a nullable <see cref="TimeSpan"/> which can be handled by the database engine.
/// </summary>
/// <remarks>
/// As of 2022-06-04 only required for Microsoft SQL server on .NET 6.0.
/// </remarks>
public class NullableTimeOnlyConverter : ValueConverter<TimeOnly?, TimeSpan?>
{
/// <summary>
/// Initializes a new instance of the <see cref="NullableTimeOnlyConverter"/> class.
/// </summary>
public NullableTimeOnlyConverter()
: base(
d => d == null ? null : new TimeSpan?(d.Value.ToTimeSpan()),
d => d == null ? null : new TimeOnly?(TimeOnly.FromTimeSpan(d.Value))
)
{ }
}
}
#endif

View File

@@ -0,0 +1,28 @@
#if NET6_0_OR_GREATER
using System;
using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
namespace AMWD.Common.EntityFrameworkCore.Converters
{
/// <summary>
/// Defines the conversion from a <see cref="TimeOnly"/> object to a <see cref="TimeSpan"/> which can be handled by the database engine.
/// </summary>
/// <remarks>
/// As of 2022-06-04 only required for Microsoft SQL server on .NET 6.0.
/// </remarks>
public class TimeOnlyConverter : ValueConverter<TimeOnly, TimeSpan>
{
/// <summary>
/// Initializes a new instance of the <see cref="TimeOnlyConverter"/> class.
/// </summary>
public TimeOnlyConverter()
: base(
t => t.ToTimeSpan(),
t => TimeOnly.FromTimeSpan(t)
)
{ }
}
}
#endif

View File

@@ -0,0 +1,43 @@
#if NET6_0_OR_GREATER
using System;
using AMWD.Common.EntityFrameworkCore.Converters;
using Microsoft.EntityFrameworkCore;
namespace AMWD.Common.EntityFrameworkCore.Extensions
{
/// <summary>
/// Extensions for the <see cref="ModelConfigurationBuilder"/> of entity framework core.
/// </summary>
public static class ModelConfigurationBuilderExtensions
{
/// <summary>
/// Adds converters for the <see cref="DateOnly"/> and <see cref="TimeOnly"/> datatypes introduced with .NET 6.0.
/// </summary>
/// <remarks>
/// As of 2022-06-04 only required for Microsoft SQL server on .NET 6.0.
/// </remarks>
/// <param name="builder">The <see cref="ModelConfigurationBuilder"/> instance.</param>
/// <returns>The <see cref="ModelConfigurationBuilder"/> instance after applying the converters.</returns>
public static ModelConfigurationBuilder AddDateOnlyTimeOnlyConverters(this ModelConfigurationBuilder builder)
{
builder.Properties<DateOnly>()
.HaveConversion<DateOnlyConverter>()
.HaveColumnType("date");
builder.Properties<DateOnly?>()
.HaveConversion<NullableDateOnlyConverter>()
.HaveColumnType("date");
builder.Properties<TimeOnly>()
.HaveConversion<TimeOnlyConverter>()
.HaveColumnType("time");
builder.Properties<TimeOnly?>()
.HaveConversion<NullableTimeOnlyConverter>()
.HaveColumnType("time");
return builder;
}
}
}
#endif