Skip to content

Commit

Permalink
Merge pull request #2 from tomlane/SampleProject
Browse files Browse the repository at this point in the history
#1 Add a sample project
  • Loading branch information
tomlane committed Jun 24, 2018
2 parents 571e3f7 + 5f47273 commit 9289250
Show file tree
Hide file tree
Showing 5 changed files with 147 additions and 0 deletions.
6 changes: 6 additions & 0 deletions NodaTime.EntityFrameworkCore.Conversions.sln
Expand Up @@ -5,6 +5,8 @@ VisualStudioVersion = 15.0.27703.2026
MinimumVisualStudioVersion = 10.0.40219.1
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "NodaTime.EntityFrameworkCore.Conversions", "src\NodaTime.EntityFrameworkCore.Conversions\NodaTime.EntityFrameworkCore.Conversions.csproj", "{FF7921C2-5698-4F98-8A6E-12A2B8B01B92}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "NodaTime.EntityFrameworkCore.Conversions.Sample", "src\NodaTime.EntityFrameworkCore.Conversions.Sample\NodaTime.EntityFrameworkCore.Conversions.Sample.csproj", "{48D8134B-D743-4B83-AA10-5AF18F7450E1}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Expand All @@ -15,6 +17,10 @@ Global
{FF7921C2-5698-4F98-8A6E-12A2B8B01B92}.Debug|Any CPU.Build.0 = Debug|Any CPU
{FF7921C2-5698-4F98-8A6E-12A2B8B01B92}.Release|Any CPU.ActiveCfg = Release|Any CPU
{FF7921C2-5698-4F98-8A6E-12A2B8B01B92}.Release|Any CPU.Build.0 = Release|Any CPU
{48D8134B-D743-4B83-AA10-5AF18F7450E1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{48D8134B-D743-4B83-AA10-5AF18F7450E1}.Debug|Any CPU.Build.0 = Debug|Any CPU
{48D8134B-D743-4B83-AA10-5AF18F7450E1}.Release|Any CPU.ActiveCfg = Release|Any CPU
{48D8134B-D743-4B83-AA10-5AF18F7450E1}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
Expand Down
@@ -0,0 +1,16 @@
<Project Sdk="Microsoft.NET.Sdk">

<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>netcoreapp2.1</TargetFramework>
</PropertyGroup>

<ItemGroup>
<PackageReference Include="Microsoft.EntityFrameworkCore.InMemory" Version="2.1.1" />
</ItemGroup>

<ItemGroup>
<ProjectReference Include="..\NodaTime.EntityFrameworkCore.Conversions\NodaTime.EntityFrameworkCore.Conversions.csproj" />
</ItemGroup>

</Project>
@@ -0,0 +1,71 @@
using Microsoft.EntityFrameworkCore;

namespace NodaTime.EntityFrameworkCore.Conversions.Sample
{
partial class Program
{
internal class NodaTimeContext : DbContext
{
public NodaTimeContext()
{ }

public NodaTimeContext(DbContextOptions<NodaTimeContext> contextOptions)
: base(contextOptions)
{ }

public DbSet<TimeData> TimeData { get; set; }

protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
optionsBuilder.UseInMemoryDatabase("NodaTimeSample");

base.OnConfiguring(optionsBuilder);
}

protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder
.Entity<TimeData>()
.Property(p => p.Duration)
.HasConversion(new DurationValueConverter());

modelBuilder
.Entity<TimeData>()
.Property(p => p.Instant)
.HasConversion(new InstantValueConverter());

modelBuilder
.Entity<TimeData>()
.Property(p => p.LocalDateTime)
.HasConversion(new LocalDateTimeValueConverter());

modelBuilder
.Entity<TimeData>()
.Property(p => p.LocalDate)
.HasConversion(new LocalDateValueConverter());

modelBuilder
.Entity<TimeData>()
.Property(p => p.LocalTime)
.HasConversion(new LocalTimeValueConverter());

modelBuilder
.Entity<TimeData>()
.Property(p => p.OffsetDateTime)
.HasConversion(new OffsetDateTimeValueConverter());

modelBuilder
.Entity<TimeData>()
.Property(p => p.Offset)
.HasConversion(new OffsetValueConverter());

modelBuilder
.Entity<TimeData>()
.Property(p => p.ZonedDateTime)
.HasConversion(new ZonedDateTimeValueConverter());

base.OnModelCreating(modelBuilder);
}
}
}
}
36 changes: 36 additions & 0 deletions src/NodaTime.EntityFrameworkCore.Conversions.Sample/Program.cs
@@ -0,0 +1,36 @@
using System;
using System.Linq;

namespace NodaTime.EntityFrameworkCore.Conversions.Sample
{
partial class Program
{
static void Main()
{
var timeData = new TimeData
{
Duration = Duration.FromMinutes(1),
Offset = Offset.FromHours(1),
ZonedDateTime = new ZonedDateTime(Instant.FromDateTimeUtc(DateTime.UtcNow), DateTimeZone.Utc),
LocalDateTime = LocalDateTime.FromDateTime(DateTime.Today),
OffsetDateTime = OffsetDateTime.FromDateTimeOffset(DateTimeOffset.UtcNow),
LocalDate = LocalDate.FromDateTime(DateTime.Today),
Instant = Instant.FromDateTimeUtc(DateTime.UtcNow),
LocalTime = new LocalTime(18, 6),
Id = Guid.NewGuid()
};

var context = new NodaTimeContext();

context.TimeData.Add(timeData);
context.SaveChanges();

var newData = context.TimeData.FirstOrDefault(x => x.Id == timeData.Id);

Console.WriteLine($"Duration: {newData.Duration}. Offset: {newData.Offset}. ZonedDateTime: {newData.ZonedDateTime}. " +
$"LocalDateTime: {newData.LocalDateTime}. OffsetDateTime: {newData.LocalDateTime}. LocalDate: {newData.LocalDate}. " +
$"LocalTime: {newData.LocalTime}. Id: {newData.Id}.");
Console.ReadLine();
}
}
}
18 changes: 18 additions & 0 deletions src/NodaTime.EntityFrameworkCore.Conversions.Sample/TimeData.cs
@@ -0,0 +1,18 @@
using System;

namespace NodaTime.EntityFrameworkCore.Conversions.Sample
{
internal class TimeData
{
public Guid Id { get; set; }

public Duration Duration { get; set; }
public Instant Instant { get; set; }
public LocalDateTime LocalDateTime { get; set; }
public LocalDate LocalDate { get; set; }
public LocalTime LocalTime { get; set; }
public OffsetDateTime OffsetDateTime { get; set; }
public Offset Offset { get; set; }
public ZonedDateTime ZonedDateTime { get; set; }
}
}

0 comments on commit 9289250

Please sign in to comment.