From e08577fd8fa8df3e44968110103cd6de940ceeea Mon Sep 17 00:00:00 2001 From: Svyatoslav Danyliv Date: Fri, 8 Apr 2022 15:47:28 +0300 Subject: [PATCH 1/5] Added better Insert skip check. --- .../EFCoreMetadataReader.cs | 15 ++++++++++++++- .../NpgSqlEntities/NpgSqlEnititesContext.cs | 7 +++++++ .../NpgSqlTests.cs | 13 +++++++++++++ 3 files changed, 34 insertions(+), 1 deletion(-) diff --git a/Source/LinqToDB.EntityFrameworkCore/EFCoreMetadataReader.cs b/Source/LinqToDB.EntityFrameworkCore/EFCoreMetadataReader.cs index a5ee122..3e75a0b 100644 --- a/Source/LinqToDB.EntityFrameworkCore/EFCoreMetadataReader.cs +++ b/Source/LinqToDB.EntityFrameworkCore/EFCoreMetadataReader.cs @@ -263,6 +263,17 @@ public T[] GetAttributes(Type type, MemberInfo memberInfo, bool inherit = tru } } + var behaviour = prop.GetBeforeSaveBehavior(); + var skipOnInsert = prop.ValueGenerated.HasFlag(ValueGenerated.OnAdd); + + if (skipOnInsert) + { + skipOnInsert = isIdentity || behaviour != PropertySaveBehavior.Save; + } + + var skipOnUpdate = behaviour != PropertySaveBehavior.Save || + prop.ValueGenerated.HasFlag(ValueGenerated.OnUpdate); + return new T[] { (T)(Attribute)new ColumnAttribute @@ -275,7 +286,9 @@ public T[] GetAttributes(Type type, MemberInfo memberInfo, bool inherit = tru IsPrimaryKey = isPrimaryKey, PrimaryKeyOrder = primaryKeyOrder, IsIdentity = isIdentity, - IsDiscriminator = discriminator == prop + IsDiscriminator = discriminator == prop, + SkipOnInsert = skipOnInsert, + SkipOnUpdate = skipOnUpdate } }; } diff --git a/Tests/LinqToDB.EntityFrameworkCore.PostgreSQL.Tests/Models/NpgSqlEntities/NpgSqlEnititesContext.cs b/Tests/LinqToDB.EntityFrameworkCore.PostgreSQL.Tests/Models/NpgSqlEntities/NpgSqlEnititesContext.cs index 45e90b9..d221559 100644 --- a/Tests/LinqToDB.EntityFrameworkCore.PostgreSQL.Tests/Models/NpgSqlEntities/NpgSqlEnititesContext.cs +++ b/Tests/LinqToDB.EntityFrameworkCore.PostgreSQL.Tests/Models/NpgSqlEntities/NpgSqlEnititesContext.cs @@ -24,10 +24,17 @@ protected override void OnModelCreating(ModelBuilder modelBuilder) modelBuilder.Entity(entity => { }); + + modelBuilder.Entity(entity => + { + entity.UseXminAsConcurrencyToken(); + }); + } public virtual DbSet Events { get; set; } = null!; public virtual DbSet EntityWithArrays { get; set; } = null!; + public virtual DbSet EntityWithXmin { get; set; } = null!; } } diff --git a/Tests/LinqToDB.EntityFrameworkCore.PostgreSQL.Tests/NpgSqlTests.cs b/Tests/LinqToDB.EntityFrameworkCore.PostgreSQL.Tests/NpgSqlTests.cs index 13361a7..12239a6 100644 --- a/Tests/LinqToDB.EntityFrameworkCore.PostgreSQL.Tests/NpgSqlTests.cs +++ b/Tests/LinqToDB.EntityFrameworkCore.PostgreSQL.Tests/NpgSqlTests.cs @@ -87,6 +87,19 @@ where Sql.Ext.PostgreSQL().Overlaps(m.Guids, guids) } } + [Test] + public void TestConcurrencyToken() + { + using var db = CreateNpgSqlEntitiesContext(); + + var toInsert = Enumerable.Range(1, 10) + .Select(i => new EntityWithXmin { Value = "Str" + i }) + .ToArray(); + + db.BulkCopy(toInsert); + } + + [Test] public void TestUnnest() { From 296201846d9d6acb3c15d07716257fc87478595d Mon Sep 17 00:00:00 2001 From: MaceWindu Date: Wed, 18 May 2022 12:40:33 +0200 Subject: [PATCH 2/5] updates + v4 migration --- Directory.Packages.props | 24 ++++---- NuGet.config | 8 ++- NuGet/linq2db.EntityFrameworkCore.nuspec | 4 +- .../EFCoreMetadataReader.cs | 16 +++-- .../LinqToDBExtensionsAdapter.cs | 16 ++--- .../LinqToDBForEFExtensions.Async.cs | 8 +-- .../LinqToDBForEFToolsDataConnection.cs | 52 ++++++++-------- .../LinqToDBForEFToolsImplDefault.cs | 61 +++---------------- .../ForMappingTestsBase.cs | 6 +- .../ForMappingTests.cs | 4 +- .../PomeloMySqlTests.cs | 10 +-- .../Models/NpgSqlEntities/EntityWithXmin.cs | 12 ++++ 12 files changed, 97 insertions(+), 124 deletions(-) create mode 100644 Tests/LinqToDB.EntityFrameworkCore.PostgreSQL.Tests/Models/NpgSqlEntities/EntityWithXmin.cs diff --git a/Directory.Packages.props b/Directory.Packages.props index 5d739ab..e8b18c7 100644 --- a/Directory.Packages.props +++ b/Directory.Packages.props @@ -1,24 +1,24 @@  - - - - + + + + - - + + - - + + - - - - + + + + diff --git a/NuGet.config b/NuGet.config index 14c2409..b81f281 100644 --- a/NuGet.config +++ b/NuGet.config @@ -4,4 +4,10 @@ - \ No newline at end of file + + + + + + + diff --git a/NuGet/linq2db.EntityFrameworkCore.nuspec b/NuGet/linq2db.EntityFrameworkCore.nuspec index 20e052b..1b68292 100644 --- a/NuGet/linq2db.EntityFrameworkCore.nuspec +++ b/NuGet/linq2db.EntityFrameworkCore.nuspec @@ -15,8 +15,8 @@ MIT-LICENSE.txt - - + + diff --git a/Source/LinqToDB.EntityFrameworkCore/EFCoreMetadataReader.cs b/Source/LinqToDB.EntityFrameworkCore/EFCoreMetadataReader.cs index 3e75a0b..187131b 100644 --- a/Source/LinqToDB.EntityFrameworkCore/EFCoreMetadataReader.cs +++ b/Source/LinqToDB.EntityFrameworkCore/EFCoreMetadataReader.cs @@ -319,10 +319,9 @@ public T[] GetAttributes(Type type, MemberInfo memberInfo, bool inherit = tru var otherKey = string.Join(",", fk.Properties.Select(p => p.Name)); associations.Add(new AssociationAttribute { - ThisKey = thisKey, - OtherKey = otherKey, - CanBeNull = !fk.IsRequiredDependent, - IsBackReference = false + ThisKey = thisKey, + OtherKey = otherKey, + CanBeNull = !fk.IsRequiredDependent, }); } else @@ -331,10 +330,9 @@ public T[] GetAttributes(Type type, MemberInfo memberInfo, bool inherit = tru var otherKey = string.Join(",", fk.PrincipalKey.Properties.Select(p => p.Name)); associations.Add(new AssociationAttribute { - ThisKey = thisKey, - OtherKey = otherKey, - CanBeNull = !fk.IsRequired, - IsBackReference = true + ThisKey = thisKey, + OtherKey = otherKey, + CanBeNull = !fk.IsRequired }); } } @@ -578,7 +576,7 @@ string PrepareExpressionText(Expression? expr) if (expr is SqlFunctionExpression sqlFunction) { var text = sqlFunction.Name; - if (!sqlFunction.Schema.IsNullOrEmpty()) + if (!string.IsNullOrEmpty(sqlFunction.Schema)) text = sqlFunction.Schema + "." + sqlFunction.Name; if (!sqlFunction.IsNiladic) diff --git a/Source/LinqToDB.EntityFrameworkCore/LinqToDBExtensionsAdapter.cs b/Source/LinqToDB.EntityFrameworkCore/LinqToDBExtensionsAdapter.cs index 7e4d5db..b835712 100644 --- a/Source/LinqToDB.EntityFrameworkCore/LinqToDBExtensionsAdapter.cs +++ b/Source/LinqToDB.EntityFrameworkCore/LinqToDBExtensionsAdapter.cs @@ -187,30 +187,30 @@ public Task LongCountAsync( => EntityFrameworkQueryableExtensions.LongCountAsync(source, predicate, token); /// - public Task MinAsync( + public Task MinAsync( IQueryable source, CancellationToken token) - => EntityFrameworkQueryableExtensions.MinAsync(source, token); + => EntityFrameworkQueryableExtensions.MinAsync(source, token)!; /// - public Task MinAsync( + public Task MinAsync( IQueryable source, Expression> selector, CancellationToken token) - => EntityFrameworkQueryableExtensions.MinAsync(source, selector, token); + => EntityFrameworkQueryableExtensions.MinAsync(source, selector, token)!; /// - public Task MaxAsync( + public Task MaxAsync( IQueryable source, CancellationToken token) - => EntityFrameworkQueryableExtensions.MaxAsync(source, token); + => EntityFrameworkQueryableExtensions.MaxAsync(source, token)!; /// - public Task MaxAsync( + public Task MaxAsync( IQueryable source, Expression> selector, CancellationToken token) - => EntityFrameworkQueryableExtensions.MaxAsync(source, selector, token); + => EntityFrameworkQueryableExtensions.MaxAsync(source, selector, token)!; #region SumAsync diff --git a/Source/LinqToDB.EntityFrameworkCore/LinqToDBForEFExtensions.Async.cs b/Source/LinqToDB.EntityFrameworkCore/LinqToDBForEFExtensions.Async.cs index 302eef8..cf8b9c1 100644 --- a/Source/LinqToDB.EntityFrameworkCore/LinqToDBForEFExtensions.Async.cs +++ b/Source/LinqToDB.EntityFrameworkCore/LinqToDBForEFExtensions.Async.cs @@ -168,26 +168,26 @@ public static Task LongCountAsyncLinqToDB( => AsyncExtensions.LongCountAsync(source.ToLinqToDB(), predicate, token); /// - public static Task MinAsyncLinqToDB( + public static Task MinAsyncLinqToDB( this IQueryable source, CancellationToken token = default) => AsyncExtensions.MinAsync(source.ToLinqToDB(), token); /// - public static Task MinAsyncLinqToDB( + public static Task MinAsyncLinqToDB( this IQueryable source, Expression> selector, CancellationToken token = default) => AsyncExtensions.MinAsync(source.ToLinqToDB(), selector, token); /// - public static Task MaxAsyncLinqToDB( + public static Task MaxAsyncLinqToDB( this IQueryable source, CancellationToken token = default) => AsyncExtensions.MaxAsync(source.ToLinqToDB(), token); /// - public static Task MaxAsyncLinqToDB( + public static Task MaxAsyncLinqToDB( this IQueryable source, Expression> selector, CancellationToken token = default) diff --git a/Source/LinqToDB.EntityFrameworkCore/LinqToDBForEFToolsDataConnection.cs b/Source/LinqToDB.EntityFrameworkCore/LinqToDBForEFToolsDataConnection.cs index 8abfdd6..fe99383 100644 --- a/Source/LinqToDB.EntityFrameworkCore/LinqToDBForEFToolsDataConnection.cs +++ b/Source/LinqToDB.EntityFrameworkCore/LinqToDBForEFToolsDataConnection.cs @@ -19,11 +19,13 @@ namespace LinqToDB.EntityFrameworkCore using DataProvider; using Linq; using Expressions; + using LinqToDB.Interceptors; + using System.Data.Common; /// /// linq2db EF.Core data connection. /// - public class LinqToDBForEFToolsDataConnection : DataConnection, IExpressionPreprocessor + public class LinqToDBForEFToolsDataConnection : DataConnection, IExpressionPreprocessor, IEntityServiceInterceptor { readonly IModel? _model; readonly Func? _transformFunc; @@ -67,7 +69,7 @@ public LinqToDBForEFToolsDataConnection( _transformFunc = transformFunc; CopyDatabaseProperties(); if (LinqToDBForEFTools.EnableChangeTracker) - OnEntityCreated += OnEntityCreatedHandler; + AddInterceptor(this); } /// @@ -80,9 +82,9 @@ public LinqToDBForEFToolsDataConnection( /// Expression converter. public LinqToDBForEFToolsDataConnection( DbContext? context, - [NotNull] IDataProvider dataProvider, - [NotNull] IDbTransaction transaction, - IModel? model, + [NotNull] IDataProvider dataProvider, + [NotNull] DbTransaction transaction, + IModel? model, Func? transformFunc ) : base(dataProvider, transaction) { @@ -91,7 +93,7 @@ public LinqToDBForEFToolsDataConnection( _transformFunc = transformFunc; CopyDatabaseProperties(); if (LinqToDBForEFTools.EnableChangeTracker) - OnEntityCreated += OnEntityCreatedHandler; + AddInterceptor(this); } /// @@ -105,7 +107,7 @@ public LinqToDBForEFToolsDataConnection( public LinqToDBForEFToolsDataConnection( DbContext? context, [NotNull] IDataProvider dataProvider, - [NotNull] IDbConnection connection, + [NotNull] DbConnection connection, IModel? model, Func? transformFunc) : base(dataProvider, connection) { @@ -114,7 +116,7 @@ public LinqToDBForEFToolsDataConnection( _transformFunc = transformFunc; CopyDatabaseProperties(); if (LinqToDBForEFTools.EnableChangeTracker) - OnEntityCreated += OnEntityCreatedHandler; + AddInterceptor(this); } /// @@ -138,7 +140,7 @@ public TypeKey(IEntityType entityType, IModel? model) } public IEntityType EntityType { get; } - public IModel? Model { get; } + public IModel? Model { get; } protected bool Equals(TypeKey other) { @@ -157,7 +159,7 @@ public override bool Equals(object? obj) return true; } - if (obj.GetType() != this.GetType()) + if (obj.GetType() != GetType()) { return false; } @@ -174,22 +176,22 @@ public override int GetHashCode() } } - private void OnEntityCreatedHandler(EntityCreatedEventArgs args) + object IEntityServiceInterceptor.EntityCreated(EntityCreatedEventData eventData, object entity) { // Do not allow to store in ChangeTracker temporary tables - if ((args.TableOptions & TableOptions.IsTemporaryOptionSet) != 0) - return; + if ((eventData.TableOptions & TableOptions.IsTemporaryOptionSet) != 0) + return entity; // Do not allow to store in ChangeTracker tables from different server - if (args.ServerName != null) - return; + if (eventData.ServerName != null) + return entity; if (!LinqToDBForEFTools.EnableChangeTracker - || !Tracking + || !Tracking || Context!.ChangeTracker.QueryTrackingBehavior == QueryTrackingBehavior.NoTracking) - return; + return entity; - var type = args.Entity.GetType(); + var type = entity.GetType(); if (_lastType != type) { _lastType = type; @@ -197,11 +199,11 @@ private void OnEntityCreatedHandler(EntityCreatedEventArgs args) } if (_lastEntityType == null) - return; + return entity; // Do not allow to store in ChangeTracker tables that has different name - if (args.TableName != _lastEntityType.GetTableName()) - return; + if (eventData.TableName != _lastEntityType.GetTableName()) + return entity; if (_stateManager == null) _stateManager = Context.GetService(); @@ -220,16 +222,16 @@ private void OnEntityCreatedHandler(EntityCreatedEventArgs args) }); if (retrievalFunc == null) - return; + return entity; - entry = retrievalFunc(_stateManager, args.Entity); + entry = retrievalFunc(_stateManager, entity); if (entry == null) { - entry = _stateManager.StartTrackingFromQuery(_lastEntityType, args.Entity, ValueBuffer.Empty); + entry = _stateManager.StartTrackingFromQuery(_lastEntityType, entity, ValueBuffer.Empty); } - args.Entity = entry.Entity; + return entry.Entity; } private Func? CreateEntityRetrievalFunc(IEntityType entityType) diff --git a/Source/LinqToDB.EntityFrameworkCore/LinqToDBForEFToolsImplDefault.cs b/Source/LinqToDB.EntityFrameworkCore/LinqToDBForEFToolsImplDefault.cs index b88b5ac..bfa0238 100644 --- a/Source/LinqToDB.EntityFrameworkCore/LinqToDBForEFToolsImplDefault.cs +++ b/Source/LinqToDB.EntityFrameworkCore/LinqToDBForEFToolsImplDefault.cs @@ -167,23 +167,22 @@ protected virtual IDataProvider CreateLinqToDbDataProvider(EFProviderInfo provid return CreateSqlServerProvider(SqlServerDefaultVersion, connectionInfo.ConnectionString); case ProviderName.MySql: case ProviderName.MySqlConnector: - return new MySqlDataProvider(provInfo.ProviderName); + return MySqlTools.GetDataProvider(provInfo.ProviderName); case ProviderName.PostgreSQL: return CreatePostgreSqlProvider(PostgreSqlDefaultVersion, connectionInfo.ConnectionString); case ProviderName.SQLite: - return new SQLiteDataProvider(provInfo.ProviderName); + return SQLiteTools.GetDataProvider(provInfo.ProviderName); case ProviderName.Firebird: - return new FirebirdDataProvider(); + return FirebirdTools.GetDataProvider(); case ProviderName.DB2: - return new DB2DataProvider(ProviderName.DB2, DB2Version.LUW); case ProviderName.DB2LUW: - return new DB2DataProvider(ProviderName.DB2, DB2Version.LUW); + return DB2Tools.GetDataProvider(DB2Version.LUW); case ProviderName.DB2zOS: - return new DB2DataProvider(ProviderName.DB2, DB2Version.zOS); + return DB2Tools.GetDataProvider(DB2Version.zOS); case ProviderName.Oracle: - return new OracleDataProvider(provInfo.ProviderName, OracleVersion.v11); + return OracleTools.GetDataProvider(provInfo.ProviderName, version: OracleVersion.v11); case ProviderName.SqlCe: - return new SqlCeDataProvider(); + return SqlCeTools.GetDataProvider(); //case ProviderName.Access: // return new AccessDataProvider(); @@ -324,34 +323,10 @@ protected virtual IDataProvider CreateLinqToDbDataProvider(EFProviderInfo provid /// linq2db SQL Server provider instance. protected virtual IDataProvider CreateSqlServerProvider(SqlServerVersion version, string? connectionString) { - string providerName; - if (!string.IsNullOrEmpty(connectionString)) - { - providerName = "Microsoft.Data.SqlClient"; + return DataConnection.GetDataProvider("Microsoft.Data.SqlClient", connectionString)!; - return DataConnection.GetDataProvider(providerName, connectionString)!; - } - - switch (version) - { - case SqlServerVersion.v2000: - providerName = ProviderName.SqlServer2000; - break; - case SqlServerVersion.v2005: - providerName = ProviderName.SqlServer2005; - break; - case SqlServerVersion.v2008: - providerName = ProviderName.SqlServer2008; - break; - case SqlServerVersion.v2012: - providerName = ProviderName.SqlServer2012; - break; - default: - throw new ArgumentOutOfRangeException($"Version '{version}' is not supported."); - } - - return new SqlServerDataProvider(providerName, version); + return DataProvider.SqlServer.SqlServerTools.GetDataProvider(version, SqlServerProvider.MicrosoftDataSqlClient); } /// @@ -365,23 +340,7 @@ protected virtual IDataProvider CreatePostgreSqlProvider(PostgreSQLVersion versi if (!string.IsNullOrEmpty(connectionString)) return DataConnection.GetDataProvider(ProviderName.PostgreSQL, connectionString)!; - string providerName; - switch (version) - { - case PostgreSQLVersion.v92: - providerName = ProviderName.PostgreSQL92; - break; - case PostgreSQLVersion.v93: - providerName = ProviderName.PostgreSQL93; - break; - case PostgreSQLVersion.v95: - providerName = ProviderName.PostgreSQL95; - break; - default: - throw new ArgumentOutOfRangeException(nameof(version), version, null); - } - - return new PostgreSQLDataProvider(providerName, version); + return PostgreSQLTools.GetDataProvider(version); } /// diff --git a/Tests/LinqToDB.EntityFrameworkCore.BaseTests/ForMappingTestsBase.cs b/Tests/LinqToDB.EntityFrameworkCore.BaseTests/ForMappingTestsBase.cs index 255f988..b66fca8 100644 --- a/Tests/LinqToDB.EntityFrameworkCore.BaseTests/ForMappingTestsBase.cs +++ b/Tests/LinqToDB.EntityFrameworkCore.BaseTests/ForMappingTestsBase.cs @@ -109,12 +109,12 @@ public virtual async Task TestUIntTable() } [Test] - public virtual void TestAmbiguousProperties() + public virtual async Task TestAmbiguousProperties() { using var context = CreateContext(); - FluentActions.Awaiting(() => context.WithDuplicateProperties.Where(x => x.Value == 1) - .ToArrayAsyncLinqToDB()).Should().NotThrow(); + await FluentActions.Awaiting(() => context.WithDuplicateProperties.Where(x => x.Value == 1) + .ToArrayAsyncLinqToDB()).Should().NotThrowAsync(); } } diff --git a/Tests/LinqToDB.EntityFrameworkCore.PomeloMySql.Tests/ForMappingTests.cs b/Tests/LinqToDB.EntityFrameworkCore.PomeloMySql.Tests/ForMappingTests.cs index 97a67e8..d1b8e17 100644 --- a/Tests/LinqToDB.EntityFrameworkCore.PomeloMySql.Tests/ForMappingTests.cs +++ b/Tests/LinqToDB.EntityFrameworkCore.PomeloMySql.Tests/ForMappingTests.cs @@ -12,7 +12,9 @@ public class ForMappingTests : ForMappingTestsBase public override ForMappingContextBase CreateContext() { var optionsBuilder = new DbContextOptionsBuilder(); - optionsBuilder.UseMySql("Server=DBHost;Port=3306;Database=TestData;Uid=TestUser;Pwd=TestPassword;charset=utf8;"); + optionsBuilder.UseMySql( + "Server=DBHost;Port=3306;Database=TestData;Uid=TestUser;Pwd=TestPassword;charset=utf8;", + ServerVersion.AutoDetect("Server=DBHost;Port=3306;Database=TestData;Uid=TestUser;Pwd=TestPassword;charset=utf8;")); optionsBuilder.UseLoggerFactory(TestUtils.LoggerFactory); var options = optionsBuilder.Options; diff --git a/Tests/LinqToDB.EntityFrameworkCore.PomeloMySql.Tests/PomeloMySqlTests.cs b/Tests/LinqToDB.EntityFrameworkCore.PomeloMySql.Tests/PomeloMySqlTests.cs index 8129e8a..bf3600b 100644 --- a/Tests/LinqToDB.EntityFrameworkCore.PomeloMySql.Tests/PomeloMySqlTests.cs +++ b/Tests/LinqToDB.EntityFrameworkCore.PomeloMySql.Tests/PomeloMySqlTests.cs @@ -1,12 +1,9 @@ -using System; -using System.Linq; +using System.Linq; using LinqToDB.Data; using LinqToDB.EntityFrameworkCore.BaseTests; using LinqToDB.EntityFrameworkCore.SqlServer.Tests.Models.Northwind; using Microsoft.EntityFrameworkCore; using NUnit.Framework; -using Pomelo.EntityFrameworkCore.MySql.Infrastructure; -using Pomelo.EntityFrameworkCore.MySql.Storage; namespace LinqToDB.EntityFrameworkCore.PomeloMySql.Tests { @@ -27,7 +24,7 @@ public PomeloMySqlTests() optionsBuilder.UseMySql( "Server=DBHost;Port=3306;Database=TestData;Uid=TestUser;Pwd=TestPassword;charset=utf8;", - builder => builder.ServerVersion(ServerVersion.Default)); + ServerVersion.AutoDetect("Server=DBHost;Port=3306;Database=TestData;Uid=TestUser;Pwd=TestPassword;charset=utf8;")); optionsBuilder.UseLoggerFactory(TestUtils.LoggerFactory); @@ -42,7 +39,6 @@ private NorthwindContext CreateMySqlSqlExntitiesContext() return ctx; } - [Test] public void SimpleProviderTest() { @@ -51,7 +47,5 @@ public void SimpleProviderTest() var items = db.Customers.Where(e => e.Address != null).ToLinqToDB().ToArray(); } } - - } } diff --git a/Tests/LinqToDB.EntityFrameworkCore.PostgreSQL.Tests/Models/NpgSqlEntities/EntityWithXmin.cs b/Tests/LinqToDB.EntityFrameworkCore.PostgreSQL.Tests/Models/NpgSqlEntities/EntityWithXmin.cs new file mode 100644 index 0000000..8d243f3 --- /dev/null +++ b/Tests/LinqToDB.EntityFrameworkCore.PostgreSQL.Tests/Models/NpgSqlEntities/EntityWithXmin.cs @@ -0,0 +1,12 @@ +using System.ComponentModel.DataAnnotations; + +namespace LinqToDB.EntityFrameworkCore.PostgreSQL.Tests.Models.NpgSqlEntities +{ + public class EntityWithXmin + { + [Key] + public int Id { get; set; } + public uint xmin { get; set; } + public string Value { get; set; } = null!; + } +} From d94d44f8105e5be7f7497929242499ab887fa0e0 Mon Sep 17 00:00:00 2001 From: MaceWindu Date: Wed, 18 May 2022 12:48:23 +0200 Subject: [PATCH 3/5] build fixes --- NuGet.config | 4 ++-- azure-pipelines.yml | 7 +------ 2 files changed, 3 insertions(+), 8 deletions(-) diff --git a/NuGet.config b/NuGet.config index b81f281..db118d1 100644 --- a/NuGet.config +++ b/NuGet.config @@ -2,9 +2,9 @@ - + - + diff --git a/azure-pipelines.yml b/azure-pipelines.yml index 4390cea..d8f76fc 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -58,12 +58,7 @@ stages: displayName: Generate nuspec condition: and(succeeded(), or(eq(variables['Build.SourceBranchName'], 'release'), eq(variables['Build.SourceBranchName'], 'master'))) - - task: NuGetToolInstaller@0 - inputs: - versionSpec: '5.x' - workingDirectory: $(Build.SourcesDirectory)/NuGet - displayName: Install nuget - condition: and(succeeded(), or(eq(variables['Build.SourceBranchName'], 'release'), eq(variables['Build.SourceBranchName'], 'master'))) + - task: NuGetToolInstaller@1 - task: CmdLine@2 inputs: From 87a2ea6b3e8e8198fbcbfaa89096fbd59f412e9b Mon Sep 17 00:00:00 2001 From: MaceWindu Date: Wed, 18 May 2022 12:56:29 +0200 Subject: [PATCH 4/5] fix build --- NuGet.config | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/NuGet.config b/NuGet.config index db118d1..a66ce80 100644 --- a/NuGet.config +++ b/NuGet.config @@ -2,12 +2,11 @@ - + - + - From 365af8a86cd50e3a8fa8c74d459192f06f91afc0 Mon Sep 17 00:00:00 2001 From: Svyatoslav Danyliv Date: Mon, 30 May 2022 12:09:04 +0300 Subject: [PATCH 5/5] Bump version. --- Build/linq2db.Default.props | 4 ++-- Directory.Packages.props | 4 ++-- NuGet/linq2db.EntityFrameworkCore.nuspec | 2 +- azure-pipelines.yml | 4 ++-- 4 files changed, 7 insertions(+), 7 deletions(-) diff --git a/Build/linq2db.Default.props b/Build/linq2db.Default.props index cc5dd2d..2e9699d 100644 --- a/Build/linq2db.Default.props +++ b/Build/linq2db.Default.props @@ -1,11 +1,11 @@  - 5.10.0 + 5.11.0 Svyatoslav Danyliv, Igor Tkachev, Dmitry Lukashenko, Ilya Chudin Linq to DB linq2db.net - 2002-2021 linq2db.net + 2002-2022 linq2db.net https://github.com/linq2db/linq2db.EntityFrameworkCore git diff --git a/Directory.Packages.props b/Directory.Packages.props index e8b18c7..643aed4 100644 --- a/Directory.Packages.props +++ b/Directory.Packages.props @@ -5,8 +5,8 @@ - - + + diff --git a/NuGet/linq2db.EntityFrameworkCore.nuspec b/NuGet/linq2db.EntityFrameworkCore.nuspec index 1b68292..14b0033 100644 --- a/NuGet/linq2db.EntityFrameworkCore.nuspec +++ b/NuGet/linq2db.EntityFrameworkCore.nuspec @@ -16,7 +16,7 @@ - + diff --git a/azure-pipelines.yml b/azure-pipelines.yml index d8f76fc..11bf5b6 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -1,8 +1,8 @@ variables: solution: 'linq2db.EFCore.sln' build_configuration: 'Release' - assemblyVersion: 5.10.0 - nugetVersion: 5.10.0 + assemblyVersion: 5.11.0 + nugetVersion: 5.11.0 artifact_nugets: 'nugets' # build on commits to important branches (master + release branches):