Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion Directory.Build.props
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
<Project>
<PropertyGroup>
<VersionPrefix>11.0.0-preview.1</VersionPrefix>
<TargetFramework>net10.0</TargetFramework>
<TargetFramework>net11.0</TargetFramework>
<LangVersion>latest</LangVersion>
<Nullable>enable</Nullable>
<TreatWarningsAsErrors>true</TreatWarningsAsErrors>
Expand Down
14 changes: 7 additions & 7 deletions Directory.Packages.props
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
<Project>
<PropertyGroup>
<EFCoreVersion>10.0.0</EFCoreVersion>
<MicrosoftExtensionsVersion>10.0.0</MicrosoftExtensionsVersion>
<EFCoreVersion>11.0.0-preview.1.26104.118</EFCoreVersion>
<MicrosoftExtensionsVersion>11.0.0-preview.1.26104.118</MicrosoftExtensionsVersion>
<NpgsqlVersion>10.0.0</NpgsqlVersion>
</PropertyGroup>

Expand All @@ -10,11 +10,11 @@
Dependencies on EF preview versions should be locked to a specific version (as provider-facing breaking changes are frequent).
For released versions, depend on anything in the current major version to allow users to update to higher patch versions.
-->
<PackageVersion Include="Microsoft.EntityFrameworkCore" Version="[10.0.0]" />
<PackageVersion Include="Microsoft.EntityFrameworkCore.Relational" Version="[10.0.0]" />
<PackageVersion Include="Microsoft.EntityFrameworkCore.Abstractions" Version="[10.0.0]" />
<PackageVersion Include="Microsoft.EntityFrameworkCore.Relational.Specification.Tests" Version="[10.0.0]" />
<PackageVersion Include="Microsoft.EntityFrameworkCore.Design" Version="[10.0.0]" />
<PackageVersion Include="Microsoft.EntityFrameworkCore" Version="[$(EFCoreVersion)]" />
<PackageVersion Include="Microsoft.EntityFrameworkCore.Relational" Version="[$(EFCoreVersion)]" />
<PackageVersion Include="Microsoft.EntityFrameworkCore.Abstractions" Version="[$(EFCoreVersion)]" />
<PackageVersion Include="Microsoft.EntityFrameworkCore.Relational.Specification.Tests" Version="[$(EFCoreVersion)]" />
<PackageVersion Include="Microsoft.EntityFrameworkCore.Design" Version="[$(EFCoreVersion)]" />

<PackageVersion Include="Microsoft.Extensions.Configuration.Json" Version="$(MicrosoftExtensionsVersion)" />
<PackageVersion Include="Microsoft.Extensions.Configuration.EnvironmentVariables" Version="$(MicrosoftExtensionsVersion)" />
Expand Down
4 changes: 2 additions & 2 deletions NuGet.config
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<packageSources>
<add key="dotnet10" value="https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet10/nuget/v3/index.json" />
<add key="dotnet11" value="https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet11/nuget/v3/index.json" />
<add key="dotnet-eng" value="https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-eng/nuget/v3/index.json" />
<add key="npgsql-vnext" value="https://www.myget.org/F/npgsql-vnext/api/v3/index.json" />
<add key="nuget.org" value="https://api.nuget.org/v3/index.json" />
Expand All @@ -18,7 +18,7 @@
<package pattern="Npgsql" />
<package pattern="Npgsql.*" />
</packageSource>
<packageSource key="dotnet10">
<packageSource key="dotnet11">
<package pattern="*" />
</packageSource>
</packageSourceMapping>
Expand Down
4 changes: 2 additions & 2 deletions global.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"sdk": {
"version": "10.0.100",
"version": "11.0.100-preview.1.26104.118",
"rollForward": "latestMinor",
"allowPrerelease": false
"allowPrerelease": true
}
Comment on lines 2 to 6
Copy link

Copilot AI Feb 10, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

global.json pins the SDK to 10.0.103 with allowPrerelease=false, but the repo now targets net11.0 (Directory.Build.props) and EFCore 11.0.0-preview packages. This combination is very likely to fail builds/restore because the pinned SDK may not support targeting net11.0 and prerelease tooling.

Consider updating the pinned SDK version to the appropriate 11.x SDK and/or setting allowPrerelease=true so the configured TargetFramework and preview dependencies can be built consistently.

Copilot uses AI. Check for mistakes.
}
237 changes: 0 additions & 237 deletions test/EFCore.PG.FunctionalTests/BuiltInDataTypesNpgsqlTest.cs
Original file line number Diff line number Diff line change
Expand Up @@ -719,212 +719,10 @@ private static void AssertNullMappedNullableDataTypes(MappedNullableDataTypes en
Assert.Null(entity.Mood);
}

public override async Task Can_query_with_null_parameters_using_any_nullable_data_type()
{
using (var context = CreateContext())
{
context.Set<BuiltInNullableDataTypes>().Add(
new BuiltInNullableDataTypes { Id = 711 });

Assert.Equal(1, await context.SaveChangesAsync());
}

using (var context = CreateContext())
{
var entity = (await context.Set<BuiltInNullableDataTypes>().Where(e => e.Id == 711).ToListAsync()).Single();

short? param1 = null;
Assert.Same(
entity,
(await context.Set<BuiltInNullableDataTypes>().Where(e => e.Id == 711 && e.TestNullableInt16 == param1).ToListAsync())
.Single());
Assert.Same(
entity,
(await context.Set<BuiltInNullableDataTypes>().Where(e => e.Id == 711 && (long?)e.TestNullableInt16 == param1)
.ToListAsync())
.Single());

int? param2 = null;
Assert.Same(
entity,
(await context.Set<BuiltInNullableDataTypes>().Where(e => e.Id == 711 && e.TestNullableInt32 == param2).ToListAsync())
.Single());

long? param3 = null;
Assert.Same(
entity,
(await context.Set<BuiltInNullableDataTypes>().Where(e => e.Id == 711 && e.TestNullableInt64 == param3).ToListAsync())
.Single());

double? param4 = null;
Assert.Same(
entity,
(await context.Set<BuiltInNullableDataTypes>().Where(e => e.Id == 711 && e.TestNullableDouble == param4).ToListAsync())
.Single());

decimal? param5 = null;
Assert.Same(
entity,
(await context.Set<BuiltInNullableDataTypes>().Where(e => e.Id == 711 && e.TestNullableDecimal == param5).ToListAsync())
.Single());

DateTime? param6 = null;
Assert.Same(
entity,
(await context.Set<BuiltInNullableDataTypes>().Where(e => e.Id == 711 && e.TestNullableDateTime == param6).ToListAsync())
.Single());

// We don't support DateTimeOffset

TimeSpan? param8 = null;
Assert.Same(
entity,
(await context.Set<BuiltInNullableDataTypes>().Where(e => e.Id == 711 && e.TestNullableTimeSpan == param8).ToListAsync())
.Single());

float? param9 = null;
Assert.Same(
entity,
(await context.Set<BuiltInNullableDataTypes>().Where(e => e.Id == 711 && e.TestNullableSingle == param9).ToListAsync())
.Single());

bool? param10 = null;
Assert.Same(
entity,
(await context.Set<BuiltInNullableDataTypes>().Where(e => e.Id == 711 && e.TestNullableBoolean == param10).ToListAsync())
.Single());

// We don't support byte

Enum64? param12 = null;
Assert.Same(
entity,
(await context.Set<BuiltInNullableDataTypes>().Where(e => e.Id == 711 && e.Enum64 == param12).ToListAsync()).Single());

Enum32? param13 = null;
Assert.Same(
entity,
(await context.Set<BuiltInNullableDataTypes>().Where(e => e.Id == 711 && e.Enum32 == param13).ToListAsync()).Single());

Enum16? param14 = null;
Assert.Same(
entity,
(await context.Set<BuiltInNullableDataTypes>().Where(e => e.Id == 711 && e.Enum16 == param14).ToListAsync()).Single());

Enum8? param15 = null;
Assert.Same(
entity,
(await context.Set<BuiltInNullableDataTypes>().Where(e => e.Id == 711 && e.Enum8 == param15).ToListAsync()).Single());

var entityType = context.Model.FindEntityType(typeof(BuiltInNullableDataTypes));
if (entityType.FindProperty(nameof(BuiltInNullableDataTypes.TestNullableUnsignedInt16)) is not null)
{
ushort? param16 = null;
Assert.Same(
entity,
(await context.Set<BuiltInNullableDataTypes>().Where(e => e.Id == 711 && e.TestNullableUnsignedInt16 == param16)
.ToListAsync())
.Single());
}

if (entityType.FindProperty(nameof(BuiltInNullableDataTypes.TestNullableUnsignedInt32)) is not null)
{
uint? param17 = null;
Assert.Same(
entity,
(await context.Set<BuiltInNullableDataTypes>().Where(e => e.Id == 711 && e.TestNullableUnsignedInt32 == param17)
.ToListAsync())
.Single());
}

if (entityType.FindProperty(nameof(BuiltInNullableDataTypes.TestNullableUnsignedInt64)) is not null)
{
ulong? param18 = null;
Assert.Same(
entity,
(await context.Set<BuiltInNullableDataTypes>().Where(e => e.Id == 711 && e.TestNullableUnsignedInt64 == param18)
.ToListAsync())
.Single());
}

if (entityType.FindProperty(nameof(BuiltInNullableDataTypes.TestNullableCharacter)) is not null)
{
char? param19 = null;
Assert.Same(
entity,
(await context.Set<BuiltInNullableDataTypes>().Where(e => e.Id == 711 && e.TestNullableCharacter == param19)
.ToListAsync())
.Single());
}

if (entityType.FindProperty(nameof(BuiltInNullableDataTypes.TestNullableSignedByte)) is not null)
{
sbyte? param20 = null;
Assert.Same(
entity,
(await context.Set<BuiltInNullableDataTypes>().Where(e => e.Id == 711 && e.TestNullableSignedByte == param20)
.ToListAsync())
.Single());
}

if (entityType.FindProperty(nameof(BuiltInNullableDataTypes.EnumU64)) is not null)
{
EnumU64? param21 = null;
Assert.Same(
entity,
(await context.Set<BuiltInNullableDataTypes>().Where(e => e.Id == 711 && e.EnumU64 == param21).ToListAsync()).Single());
}

if (entityType.FindProperty(nameof(BuiltInNullableDataTypes.EnumU32)) is not null)
{
EnumU32? param22 = null;
Assert.Same(
entity,
(await context.Set<BuiltInNullableDataTypes>().Where(e => e.Id == 711 && e.EnumU32 == param22).ToListAsync()).Single());
}

if (entityType.FindProperty(nameof(BuiltInNullableDataTypes.EnumU16)) is not null)
{
EnumU16? param23 = null;
Assert.Same(
entity,
(await context.Set<BuiltInNullableDataTypes>().Where(e => e.Id == 711 && e.EnumU16 == param23).ToListAsync()).Single());
}

if (entityType.FindProperty(nameof(BuiltInNullableDataTypes.EnumS8)) is not null)
{
EnumS8? param24 = null;
Assert.Same(
entity,
(await context.Set<BuiltInNullableDataTypes>().Where(e => e.Id == 711 && e.EnumS8 == param24).ToListAsync()).Single());
}
}
}

[ConditionalFact(Skip = "DateTimeOffset with non-zero offset, https://github.com/dotnet/efcore/issues/26068")]
public override Task Can_insert_and_read_back_all_nullable_data_types_with_values_set_to_non_null()
=> Task.CompletedTask;

[ConditionalFact(Skip = "DateTimeOffset with non-zero offset, https://github.com/dotnet/efcore/issues/26068")]
public override Task Can_insert_and_read_back_non_nullable_backed_data_types()
=> Task.CompletedTask;

[ConditionalFact(Skip = "DateTimeOffset with non-zero offset, https://github.com/dotnet/efcore/issues/26068")]
public override Task Can_insert_and_read_back_nullable_backed_data_types()
=> Task.CompletedTask;

[ConditionalFact(Skip = "DateTimeOffset with non-zero offset, https://github.com/dotnet/efcore/issues/26068")]
public override Task Can_insert_and_read_back_object_backed_data_types()
=> Task.CompletedTask;

[ConditionalFact(Skip = "DateTimeOffset with non-zero offset, https://github.com/dotnet/efcore/issues/26068")]
public override Task Can_query_using_any_data_type_nullable_shadow()
=> Task.CompletedTask;

[ConditionalFact(Skip = "DateTimeOffset with non-zero offset, https://github.com/dotnet/efcore/issues/26068")]
public override Task Can_query_using_any_data_type_shadow()
=> Task.CompletedTask;

[ConditionalFact]
public void Sum_Conversions()
{
Expand Down Expand Up @@ -1017,36 +815,17 @@ protected override void OnModelCreating(ModelBuilder modelBuilder, DbContext con
// supported.
modelBuilder.Entity<BuiltInDataTypes>().Property(b => b.TestDateTime)
.HasColumnType("timestamp without time zone");
modelBuilder.Entity<BuiltInNullableDataTypes>().Property(b => b.TestNullableDateTime)
.HasColumnType("timestamp without time zone");
modelBuilder.Entity<BuiltInNullableDataTypesShadow>().Property(nameof(BuiltInNullableDataTypes.TestNullableDateTime))
.HasColumnType("timestamp without time zone");
modelBuilder.Entity<ObjectBackedDataTypes>().Property(b => b.DateTime)
.HasColumnType("timestamp without time zone");
modelBuilder.Entity<NullableBackedDataTypes>().Property(b => b.DateTime)
.HasColumnType("timestamp without time zone");
modelBuilder.Entity<NonNullableBackedDataTypes>().Property(b => b.DateTime)
.HasColumnType("timestamp without time zone");

// We don't support DateTimeOffset with non-zero offset, so we need to override the seeding data
modelBuilder.Entity<BuiltInDataTypes>().Metadata.GetSeedData()
.Single(t => (int)t[nameof(BuiltInDataTypes.Id)] == 13)[nameof(BuiltInDataTypes.TestDateTimeOffset)]
= new DateTimeOffset(DateTime.Parse("01/01/2000 12:34:56"), TimeSpan.Zero);

modelBuilder.Entity<BuiltInNullableDataTypes>().Metadata.GetSeedData()
.Single(t => (int)t[nameof(BuiltInDataTypes.Id)] == 13)[nameof(BuiltInNullableDataTypes.TestNullableDateTimeOffset)]
= new DateTimeOffset(DateTime.Parse("01/01/2000 12:34:56"), TimeSpan.Zero);

modelBuilder.Entity<ObjectBackedDataTypes>().Metadata.GetSeedData()
.Single()[nameof(ObjectBackedDataTypes.DateTimeOffset)] = new DateTimeOffset(new DateTime(), TimeSpan.Zero);

modelBuilder.Entity<NullableBackedDataTypes>().Metadata.GetSeedData()
.Single()[nameof(NullableBackedDataTypes.DateTimeOffset)]
= new DateTimeOffset(DateTime.Parse("01/01/2000 12:34:56"), TimeSpan.Zero);

modelBuilder.Entity<NonNullableBackedDataTypes>().Metadata.GetSeedData()
.Single()[nameof(NonNullableBackedDataTypes.DateTimeOffset)] = new DateTimeOffset(new DateTime(), TimeSpan.Zero);

modelBuilder.Entity<BuiltInDataTypes>(
b =>
{
Expand All @@ -1063,22 +842,6 @@ protected override void OnModelCreating(ModelBuilder modelBuilder, DbContext con
//b.Ignore(dt => dt.EnumS8);
});

modelBuilder.Entity<BuiltInNullableDataTypes>(
b =>
{
b.Ignore(dt => dt.TestNullableUnsignedInt16);
b.Ignore(dt => dt.TestNullableUnsignedInt32);
b.Ignore(dt => dt.TestNullableUnsignedInt64);
b.Ignore(dt => dt.TestNullableCharacter);
b.Ignore(dt => dt.TestNullableSignedByte);
b.Ignore(dt => dt.TestNullableDateTimeOffset);
b.Ignore(dt => dt.TestNullableByte);
//b.Ignore(dt => dt.EnumU16);
//b.Ignore(dt => dt.EnumU32);
//b.Ignore(dt => dt.EnumU64);
//b.Ignore(dt => dt.EnumS8);
});

modelBuilder.Entity<MappedDataTypes>(
b =>
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,9 +5,19 @@ public class NonSharedModelBulkUpdatesNpgsqlTest(NonSharedFixture fixture) : Non
protected override ITestStoreFactory TestStoreFactory
=> NpgsqlTestStoreFactory.Instance;

[ConditionalFact]
public virtual void Check_all_tests_overridden()
=> TestHelpers.AssertAllMethodsOverridden(GetType());

public override async Task Update_complex_type_property_with_view_mapping(bool async)
{
await base.Update_complex_type_property_with_view_mapping(async);

AssertSql(
"""
@p='6'

UPDATE "Blogs" AS b
SET "ComplexThing_Prop1" = @p
""");
}

public override async Task Delete_aggregate_root_when_eager_loaded_owned_collection(bool async)
{
Expand Down Expand Up @@ -270,12 +280,24 @@ public override async Task Update_complex_type_with_view_mapping(bool async)
await base.Update_complex_type_with_view_mapping(async);

// #34706
AssertSql();
AssertSql(
"""
@complex_type_p_Prop1='3' (Nullable = true)
@complex_type_p_Prop2='4' (Nullable = true)

UPDATE "Blogs" AS b
SET "ComplexThing_Prop1" = @complex_type_p_Prop1,
"ComplexThing_Prop2" = @complex_type_p_Prop2
""");
}

private void AssertSql(params string[] expected)
=> TestSqlLoggerFactory.AssertBaseline(expected);

private void AssertExecuteUpdateSql(params string[] expected)
=> TestSqlLoggerFactory.AssertBaseline(expected, forUpdate: true);

[ConditionalFact]
public virtual void Check_all_tests_overridden()
=> TestHelpers.AssertAllMethodsOverridden(GetType());
}
Loading