Skip to content
This repository was archived by the owner on Feb 1, 2025. It is now read-only.

Commit e96298c

Browse files
committed
backport from v5
1 parent 6a43177 commit e96298c

File tree

12 files changed

+82
-37
lines changed

12 files changed

+82
-37
lines changed

Directory.Packages.props

+6-6
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
11
<Project>
22
<ItemGroup>
3-
<PackageVersion Include="Microsoft.NET.Test.Sdk" Version="17.5.0" />
4-
<PackageVersion Include="NUnit3TestAdapter" Version="4.3.1" />
3+
<PackageVersion Include="Microsoft.NET.Test.Sdk" Version="17.6.0" />
4+
<PackageVersion Include="NUnit3TestAdapter" Version="4.4.2" />
55
<PackageVersion Include="NUnit" Version="3.13.3" />
6-
<PackageVersion Include="FluentAssertions" Version="6.10.0" />
6+
<PackageVersion Include="FluentAssertions" Version="6.11.0" />
77

8-
<PackageVersion Include="linq2db" Version="5.0.0" />
9-
<PackageVersion Include="linq2db.Tools" Version="5.0.0" />
8+
<PackageVersion Include="linq2db" Version="5.2.1" />
9+
<PackageVersion Include="linq2db.Tools" Version="5.2.1" />
1010

1111
<PackageVersion Include="Microsoft.SourceLink.GitHub" Version="1.1.1" />
1212
<PackageVersion Include="Microsoft.Bcl.AsyncInterfaces" Version="6.0.0" />
@@ -18,7 +18,7 @@
1818
<PackageVersion Include="Microsoft.Extensions.Logging.Console" Version="5.0.0" />
1919

2020
<PackageVersion Include="Pomelo.EntityFrameworkCore.MySql" Version="3.2.7" />
21-
<PackageVersion Include="Npgsql.EntityFrameworkCore.PostgreSQL" Version="3.1.18" />
21+
<PackageVersion Include="Npgsql.EntityFrameworkCore.PostgreSQL.NodaTime" Version="3.1.18" />
2222
<PackageVersion Include="Microsoft.EntityFrameworkCore.Sqlite" Version="3.1.32" />
2323
<PackageVersion Include="Microsoft.EntityFrameworkCore.SqlServer" Version="3.1.32" />
2424
</ItemGroup>

Source/LinqToDB.EntityFrameworkCore/LinqToDBForEFToolsImplDefault.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -900,7 +900,7 @@ TransformInfo LocalTransform(Expression e)
900900
methodCall.Arguments[2]), false, true);
901901
}
902902

903-
if (typeof(IQueryable<>).IsSameOrParentOf(methodCall.Type))
903+
if (typeof(IQueryable<>).IsSameOrParentOf(methodCall.Type) && methodCall.Type.Assembly != typeof(LinqExtensions).Assembly)
904904
{
905905
if (null == methodCall.Find(nonEvaluatableParameters,
906906
(c, t) => t.NodeType == ExpressionType.Parameter && c.Contains(t)))

Tests/LinqToDB.EntityFrameworkCore.PostgreSQL.Tests/LinqToDB.EntityFrameworkCore.PostgreSQL.Tests.csproj

+1-4
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,7 @@
44

55
<ItemGroup>
66
<PackageReference Include="FluentAssertions" />
7-
</ItemGroup>
8-
9-
<ItemGroup>
10-
<PackageReference Include="Npgsql.EntityFrameworkCore.PostgreSQL" />
7+
<PackageReference Include="Npgsql.EntityFrameworkCore.PostgreSQL.NodaTime" />
118
</ItemGroup>
129

1310
<ItemGroup>

Tests/LinqToDB.EntityFrameworkCore.PostgreSQL.Tests/Models/NpgSqlEntities/NpgSqlEnititesContext.cs

+9-1
Original file line numberDiff line numberDiff line change
@@ -30,11 +30,19 @@ protected override void OnModelCreating(ModelBuilder modelBuilder)
3030
entity.UseXminAsConcurrencyToken();
3131
});
3232

33+
modelBuilder.Entity<TimeStampEntity>(e =>
34+
{
35+
e.Property(e => e.Timestamp1).HasColumnType("timestamp");
36+
e.Property(e => e.Timestamp2).HasColumnType("timestamp");
37+
e.Property(e => e.TimestampTZ1).HasColumnType("timestamp with time zone");
38+
e.Property(e => e.TimestampTZ2).HasColumnType("timestamp with time zone");
39+
e.Property(e => e.TimestampTZ3).HasColumnType("timestamp with time zone");
40+
});
3341
}
3442

3543
public virtual DbSet<Event> Events { get; set; } = null!;
3644
public virtual DbSet<EntityWithArrays> EntityWithArrays { get; set; } = null!;
3745
public virtual DbSet<EntityWithXmin> EntityWithXmin { get; set; } = null!;
38-
46+
public virtual DbSet<TimeStampEntity> TimeStamps { get; set; } = null!;
3947
}
4048
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
using System;
2+
using NodaTime;
3+
4+
namespace LinqToDB.EntityFrameworkCore.PostgreSQL.Tests.Models.NpgSqlEntities
5+
{
6+
public class TimeStampEntity
7+
{
8+
public int Id { get; set; }
9+
public DateTime Timestamp1 { get; set; }
10+
public LocalDateTime Timestamp2 { get; set; }
11+
public DateTime TimestampTZ1 { get; set; }
12+
public DateTimeOffset TimestampTZ2 { get; set; }
13+
public Instant TimestampTZ3 { get; set; }
14+
}
15+
}

Tests/LinqToDB.EntityFrameworkCore.PostgreSQL.Tests/NpgSqlTests.cs

+21-4
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
using LinqToDB.EntityFrameworkCore.BaseTests;
77
using LinqToDB.EntityFrameworkCore.PostgreSQL.Tests.Models.NpgSqlEntities;
88
using Microsoft.EntityFrameworkCore;
9+
using NodaTime;
910
using NUnit.Framework;
1011

1112
namespace LinqToDB.EntityFrameworkCore.PostgreSQL.Tests
@@ -23,10 +24,9 @@ static NpgSqlTests()
2324
public NpgSqlTests()
2425
{
2526
var optionsBuilder = new DbContextOptionsBuilder<NpgSqlEnititesContext>();
26-
//new SqlServerDbContextOptionsBuilder(optionsBuilder);
2727

28-
//optionsBuilder.UseNpgsql("Server=DBHost;Port=5432;Database=TestData;User Id=postgres;Password=TestPassword;Pooling=true;MinPoolSize=10;MaxPoolSize=100;");
29-
optionsBuilder.UseNpgsql("Server=localhost;Port=5415;Database=TestData;User Id=postgres;Password=Password12!;Pooling=true;MinPoolSize=10;MaxPoolSize=100;");
28+
//optionsBuilder.UseNpgsql("Server=DBHost;Port=5432;Database=TestData;User Id=postgres;Password=TestPassword;Pooling=true;MinPoolSize=10;MaxPoolSize=100;", o => o.UseNodaTime());
29+
optionsBuilder.UseNpgsql("Server=localhost;Port=5415;Database=TestData;User Id=postgres;Password=Password12!;Pooling=true;MinPoolSize=10;MaxPoolSize=100;", o => o.UseNodaTime());
3030
optionsBuilder.UseLoggerFactory(TestUtils.LoggerFactory);
3131

3232
_options = optionsBuilder.Options;
@@ -100,7 +100,6 @@ public void TestConcurrencyToken()
100100
db.BulkCopy(toInsert);
101101
}
102102

103-
104103
[Test]
105104
public void TestUnnest()
106105
{
@@ -119,5 +118,23 @@ where Sql.Ext.PostgreSQL().Overlaps(m.Guids, guids)
119118
query.Invoking(q => q.ToArray()).Should().NotThrow();
120119
}
121120

121+
[Test]
122+
public void TestDateTimeKind([Values] DateTimeKind kind)
123+
{
124+
using var db = CreateNpgSqlEntitiesContext();
125+
using var dc = db.CreateLinqToDBConnection();
126+
127+
var dt = new DateTime(DateTime.Now.Ticks, kind);
128+
var dto = DateTimeOffset.Now;
129+
var ins = Instant.FromDateTimeOffset(dto);
130+
var ldt = LocalDateTime.FromDateTime(DateTime.Now);
131+
132+
db.TimeStamps.Where(e => e.Timestamp1 == dt).ToLinqToDB().ToArray();
133+
db.TimeStamps.Where(e => e.Timestamp2 == ldt).ToLinqToDB().ToArray();
134+
db.TimeStamps.Where(e => e.TimestampTZ1 == dt).ToLinqToDB().ToArray();
135+
db.TimeStamps.Where(e => e.TimestampTZ2 == dto).ToLinqToDB().ToArray();
136+
db.TimeStamps.Where(e => e.TimestampTZ3 == ins).ToLinqToDB().ToArray();
137+
}
138+
122139
}
123140
}

Tests/LinqToDB.EntityFrameworkCore.SqlServer.Tests/IssueTests.cs

+8
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
using System.Linq;
22
using FluentAssertions;
3+
using LinqToDB.DataProvider.SqlServer;
34
using LinqToDB.EntityFrameworkCore.BaseTests;
45
using LinqToDB.EntityFrameworkCore.SqlServer.Tests.Models.IssueModel;
56
using Microsoft.EntityFrameworkCore;
@@ -79,5 +80,12 @@ from p in ctx.Patents.Include(p => p.Assessment)
7980
Assert.That(db.LastQuery, Does.Not.Contain("INNER"));
8081
}
8182

83+
[Test]
84+
public void Issue321Test()
85+
{
86+
using var ctx = CreateContext();
87+
88+
var _ = ctx.Patents.AsSqlServer().ToLinqToDB().ToArray();
89+
}
8290
}
8391
}

Tests/LinqToDB.EntityFrameworkCore.SqlServer.Tests/Models/Northwind.Mapping/CategoriesMap.cs

+2-2
Original file line numberDiff line numberDiff line change
@@ -22,9 +22,9 @@ public override void Configure(EntityTypeBuilder<Category> builder)
2222
.IsRequired()
2323
.HasMaxLength(15);
2424

25-
builder.Property(e => e.Description).HasColumnType("ntext");
25+
builder.Property(e => e.Description).HasColumnType("nvarchar(max)");
2626

27-
builder.Property(e => e.Picture).HasColumnType("image");
27+
builder.Property(e => e.Picture).HasColumnType("varbinary(max)");
2828
}
2929
}
3030
}

Tests/LinqToDB.EntityFrameworkCore.SqlServer.Tests/Models/Northwind.Mapping/CustomerDemographicsMap.cs

+14-14
Original file line numberDiff line numberDiff line change
@@ -4,21 +4,21 @@
44

55
namespace LinqToDB.EntityFrameworkCore.SqlServer.Tests.Models.Northwind.Mapping
66
{
7-
public class CustomerDemographicsMap : BaseEntityMap<CustomerDemographics>
8-
{
9-
public override void Configure(EntityTypeBuilder<CustomerDemographics> builder)
10-
{
11-
base.Configure(builder);
7+
public class CustomerDemographicsMap : BaseEntityMap<CustomerDemographics>
8+
{
9+
public override void Configure(EntityTypeBuilder<CustomerDemographics> builder)
10+
{
11+
base.Configure(builder);
1212

13-
builder.HasKey(e => e.CustomerTypeId)
14-
.IsClustered(false);
13+
builder.HasKey(e => e.CustomerTypeId)
14+
.IsClustered(false);
1515

16-
builder.Property(e => e.CustomerTypeId)
17-
.HasColumnName("CustomerTypeID")
18-
.HasMaxLength(10)
19-
.ValueGeneratedNever();
16+
builder.Property(e => e.CustomerTypeId)
17+
.HasColumnName("CustomerTypeID")
18+
.HasMaxLength(10)
19+
.ValueGeneratedNever();
2020

21-
builder.Property(e => e.CustomerDesc).HasColumnType("ntext");
22-
}
23-
}
21+
builder.Property(e => e.CustomerDesc).HasColumnType("nvarchar(max)");
22+
}
23+
}
2424
}

Tests/LinqToDB.EntityFrameworkCore.SqlServer.Tests/Models/Northwind.Mapping/EmployeesMap.cs

+2-2
Original file line numberDiff line numberDiff line change
@@ -43,9 +43,9 @@ public override void Configure(EntityTypeBuilder<Employee> builder)
4343
.IsRequired()
4444
.HasMaxLength(20);
4545

46-
builder.Property(e => e.Notes).HasColumnType("ntext");
46+
builder.Property(e => e.Notes).HasColumnType("nvarchar(max)");
4747

48-
builder.Property(e => e.Photo).HasColumnType("image");
48+
builder.Property(e => e.Photo).HasColumnType("varbinary(max)");
4949

5050
builder.Property(e => e.PhotoPath).HasMaxLength(255);
5151

Tests/LinqToDB.EntityFrameworkCore.SqlServer.Tests/Models/Northwind.Mapping/SuppliersMap.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ public override void Configure(EntityTypeBuilder<Supplier> builder)
3737

3838
builder.Property(e => e.Fax).HasMaxLength(24);
3939

40-
builder.Property(e => e.HomePage).HasColumnType("ntext");
40+
builder.Property(e => e.HomePage).HasColumnType("nvarchar(max)");
4141

4242
builder.Property(e => e.Phone).HasMaxLength(24);
4343

azure-pipelines.yml

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
variables:
22
solution: 'linq2db.EFCore.sln'
33
build_configuration: 'Release'
4-
assemblyVersion: 3.23.0
5-
nugetVersion: 3.23.0
4+
assemblyVersion: 3.24.0
5+
nugetVersion: 3.24.0
66
artifact_nugets: 'nugets'
77

88
# build on commits to important branches (master + release branches):

0 commit comments

Comments
 (0)