From 44293619c85f979da4a6feb902514c4ac8d4ae62 Mon Sep 17 00:00:00 2001 From: Mikhail Preyskurantov Date: Wed, 3 Apr 2024 20:39:09 +0300 Subject: [PATCH 01/11] header filter - convert group interval string --- net/DevExtreme.AspNet.Data/GroupHelper.cs | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/net/DevExtreme.AspNet.Data/GroupHelper.cs b/net/DevExtreme.AspNet.Data/GroupHelper.cs index d838e56d..c037d401 100644 --- a/net/DevExtreme.AspNet.Data/GroupHelper.cs +++ b/net/DevExtreme.AspNet.Data/GroupHelper.cs @@ -1,11 +1,9 @@ using DevExtreme.AspNet.Data.Helpers; using DevExtreme.AspNet.Data.ResponseModel; + using System; using System.Collections.Generic; using System.Linq; -using System.Linq.Expressions; -using System.Reflection; -using System.Threading.Tasks; namespace DevExtreme.AspNet.Data { @@ -96,6 +94,11 @@ static DateTime ToDateTime(object value) { if(value is DateTimeOffset offset) return offset.DateTime; +#if NET6_0_OR_GREATER + if(value is DateOnly date) + return date.ToDateTime(TimeOnly.MinValue); +#endif + return Convert.ToDateTime(value); } } From 8eabbfbb0ee9f3ad75e6b9426007cb59e63c6201 Mon Sep 17 00:00:00 2001 From: Mikhail Preyskurantov Date: Fri, 5 Apr 2024 18:52:26 +0300 Subject: [PATCH 02/11] group expand data rows - parse string value --- net/DevExtreme.AspNet.Data/Utils.cs | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/net/DevExtreme.AspNet.Data/Utils.cs b/net/DevExtreme.AspNet.Data/Utils.cs index c24c70d0..675253e2 100644 --- a/net/DevExtreme.AspNet.Data/Utils.cs +++ b/net/DevExtreme.AspNet.Data/Utils.cs @@ -48,6 +48,13 @@ public static object ConvertClientValue(object value, Type type) { if(type == typeof(DateTimeOffset) && value is DateTime date) return new DateTimeOffset(date); +#if NET6_0_OR_GREATER + if(type == typeof(DateOnly) && value is String) + return DateOnly.Parse((string)value, CultureInfo.InvariantCulture); + if(type == typeof(TimeOnly) && value is String) + return TimeOnly.Parse((string)value, CultureInfo.InvariantCulture); +#endif + var converter = TypeDescriptor.GetConverter(type); if(converter != null && converter.CanConvertFrom(value.GetType())) return converter.ConvertFrom(null, CultureInfo.InvariantCulture, value); From 41a36cc1a820689ce8b16fbad30ddd8662e20bd5 Mon Sep 17 00:00:00 2001 From: Mikhail Preyskurantov Date: Fri, 5 Apr 2024 19:24:59 +0300 Subject: [PATCH 03/11] setup app - add new columns to Northwind, add multi targets, add converters and conventions for net6/net7 --- net/Sample/Controllers/NorthwindController.cs | 8 +++-- net/Sample/Converters.cs | 36 +++++++++++++++++++ net/Sample/Models/NorthwindContext.cs | 9 +++++ net/Sample/Models/Order.cs | 12 +++++++ net/Sample/Program.cs | 9 ++++- net/Sample/SQL.txt | 18 ++++++++++ net/Sample/Sample.csproj | 35 +++++++++++++++--- net/Sample/Views/Home/Index.cshtml | 20 ++++++++++- 8 files changed, 139 insertions(+), 8 deletions(-) create mode 100644 net/Sample/Converters.cs create mode 100644 net/Sample/SQL.txt diff --git a/net/Sample/Controllers/NorthwindController.cs b/net/Sample/Controllers/NorthwindController.cs index b4453804..c8a26699 100644 --- a/net/Sample/Controllers/NorthwindController.cs +++ b/net/Sample/Controllers/NorthwindController.cs @@ -1,12 +1,12 @@ using DevExtreme.AspNet.Data; -using Sample.Models; - using Microsoft.AspNetCore.Mvc; using Microsoft.EntityFrameworkCore; using Newtonsoft.Json; +using Sample.Models; + namespace Sample.Controllers { [Route("nwind")] @@ -23,6 +23,10 @@ public async Task Orders(DataSourceLoadOptions loadOptions) { o.OrderId, o.CustomerId, o.OrderDate, + //---------------------------------------- + o.OrderDateOnly, + o.OrderTimeOnly, + //---------------------------------------- o.Freight, o.ShipCountry, o.ShipRegion, diff --git a/net/Sample/Converters.cs b/net/Sample/Converters.cs new file mode 100644 index 00000000..4f79413d --- /dev/null +++ b/net/Sample/Converters.cs @@ -0,0 +1,36 @@ +#if NET6_0 +using System.Text.Json; +using System.Text.Json.Serialization; +#endif + +#if NET6_0 || NET7_0 +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; +#endif + +#if NET6_0 +// TODO: Remove after migrate to net7+ +// https://devblogs.microsoft.com/dotnet/system-text-json-in-dotnet-7/ +// https://stackoverflow.com/questions/74246482/ +public sealed class Net6DateOnlyJsonConverter : JsonConverter { + public override DateOnly Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options) => DateOnly.FromDateTime(reader.GetDateTime()); + public override void Write(Utf8JsonWriter writer, DateOnly value, JsonSerializerOptions options) => writer.WriteStringValue(value.ToString("O")); +} +public sealed class Net6TimeOnlyJsonConverter : JsonConverter { + public override TimeOnly Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options) => TimeOnly.Parse(reader.GetString()); + public override void Write(Utf8JsonWriter writer, TimeOnly value, JsonSerializerOptions options) => writer.WriteStringValue(value.ToString("HH:mm:ss.fff")); +} +#endif + +#if NET6_0 || NET7_0 +public sealed class NetLess8DateOnlyValueConverter : ValueConverter { + public NetLess8DateOnlyValueConverter() : base( + dateOnly => dateOnly.ToDateTime(TimeOnly.MinValue), + dateTime => DateOnly.FromDateTime(dateTime)) { } +} + +public sealed class NetLess8TimeOnlyValueConverter : ValueConverter { + public NetLess8TimeOnlyValueConverter() : base( + timeOnly => timeOnly.ToTimeSpan(), + timeSpan => TimeOnly.FromTimeSpan(timeSpan)) { } +} +#endif diff --git a/net/Sample/Models/NorthwindContext.cs b/net/Sample/Models/NorthwindContext.cs index 49742f8a..fdc7d688 100644 --- a/net/Sample/Models/NorthwindContext.cs +++ b/net/Sample/Models/NorthwindContext.cs @@ -125,5 +125,14 @@ protected override void OnModelCreating(ModelBuilder modelBuilder) { .HasConstraintName("FK_Products_Categories"); }); } + +#if NET6_0 || NET7_0 + protected override void ConfigureConventions(ModelConfigurationBuilder configurationBuilder) { + base.ConfigureConventions(configurationBuilder); + configurationBuilder.Properties().HaveConversion(); + configurationBuilder.Properties().HaveConversion(); + } +#endif + } } diff --git a/net/Sample/Models/Order.cs b/net/Sample/Models/Order.cs index 5ce00899..c5d5882c 100644 --- a/net/Sample/Models/Order.cs +++ b/net/Sample/Models/Order.cs @@ -20,9 +20,21 @@ public Order() { [Column("EmployeeID")] public int? EmployeeId { get; set; } + //---------------------------------------- + [Column(TypeName = "datetime")] public DateTime? OrderDate { get; set; } + // [NotMapped] + // [Column(TypeName = "date")] + // public DateOnly? OrderDateOnly => DateOnly.FromDateTime(OrderDate.Value); + + public DateOnly? OrderDateOnly { get; set; } + + public TimeOnly? OrderTimeOnly { get; set; } + + //---------------------------------------- + [Column(TypeName = "datetime")] public DateTime? RequiredDate { get; set; } diff --git a/net/Sample/Program.cs b/net/Sample/Program.cs index 83651ea8..5aa338f1 100644 --- a/net/Sample/Program.cs +++ b/net/Sample/Program.cs @@ -7,7 +7,14 @@ public static void Main(string[] args) { var builder = WebApplication.CreateBuilder(args); builder.Services .AddControllersWithViews() - .AddRazorRuntimeCompilation(); + //.AddRazorRuntimeCompilation() +#if NET6_0 + .AddJsonOptions(options => { + options.JsonSerializerOptions.Converters.Add(new Net6DateOnlyJsonConverter()); + options.JsonSerializerOptions.Converters.Add(new Net6TimeOnlyJsonConverter()); + }) +#endif + ; builder.Services .AddLogging() .AddEntityFrameworkSqlServer() diff --git a/net/Sample/SQL.txt b/net/Sample/SQL.txt new file mode 100644 index 00000000..64e8fb8b --- /dev/null +++ b/net/Sample/SQL.txt @@ -0,0 +1,18 @@ +USE [Northwind] +GO +ALTER TABLE [Orders] +ADD [OrderDateOnly] date NULL +GO +UPDATE [Orders] SET [OrderDateOnly] = CONVERT(date, [OrderDate]) +GO +ALTER TABLE [Orders] +ADD [OrderDateTimeOnly] time NULL +GO +UPDATE [Orders] SET [OrderDateTimeOnly] = CONVERT(time, DATEADD(hour, ([OrderID] + 1), [OrderDate])) + +--- + +dotnet add package Microsoft.EntityFrameworkCore.Tools +dotnet add package Microsoft.EntityFrameworkCore.SqlServer + +Scaffold-DbContext "Data Source=(localdb)\MSSQLLocalDB; Database=Northwind; Integrated Security=True; MultipleActiveResultSets=True; App=EntityFramework" Microsoft.EntityFrameworkCore.SqlServer -OutputDir Models \ No newline at end of file diff --git a/net/Sample/Sample.csproj b/net/Sample/Sample.csproj index 1cb12f9a..bb6beea5 100644 --- a/net/Sample/Sample.csproj +++ b/net/Sample/Sample.csproj @@ -1,20 +1,47 @@  - net6.0 + net6.0;net7.0;net8.0 enable - - - + + NET6.0 + + + + + + + + + NET7.0 + + + + + + + + + NET8.0 + + + + + + + + diff --git a/net/Sample/Views/Home/Index.cshtml b/net/Sample/Views/Home/Index.cshtml index fdca3920..2b821610 100644 --- a/net/Sample/Views/Home/Index.cshtml +++ b/net/Sample/Views/Home/Index.cshtml @@ -39,6 +39,20 @@ groupInterval: "quarter" } }, + { + dataField: "orderDateOnly", + dataType: "date", + headerFilter: { + groupInterval: "quarter" + } + }, + { + dataField: "orderTimeOnly", + dataType: "time", + headerFilter: { + //groupInterval: "quarter" // N|A + } + }, { dataField: "freight", headerFilter: { @@ -61,6 +75,7 @@ ], groupPanel: { visible: true }, + searchPanel: { visible: true }, filterRow: { visible: true }, headerFilter: { visible: true }, editing: { @@ -74,7 +89,10 @@ }, summary: { totalItems: [ - { column: "freight", summaryType: "sum" } + { column: "freight", summaryType: "sum" }, + { column: "orderDate", summaryType: "count" }, + { column: "orderDateOnly", summaryType: "count" }, + //{ column: "orderTimeOnly", summaryType: "count" } ], groupItems: [ { column: "freight", summaryType: "sum" }, From 6f5938b221be53cfbbc2675d3b698b44565dc1b5 Mon Sep 17 00:00:00 2001 From: Mikhail Preyskurantov Date: Fri, 5 Apr 2024 20:25:47 +0300 Subject: [PATCH 04/11] remote grouping test for new type (ef fails when less 8, nh / xpo ignored) --- .../RemoteGroupingStressHelper.cs | 12 ++++++++++-- .../RemoteGroupingStress.cs | 3 +++ .../RemoteGroupingStress.cs | 7 ++++++- .../DevExtreme.AspNet.Data.Tests.Xpo.csproj | 4 ++-- .../RemoteGroupingStress.cs | 11 ++++++++++- 5 files changed, 31 insertions(+), 6 deletions(-) diff --git a/net/DevExtreme.AspNet.Data.Tests.Common/RemoteGroupingStressHelper.cs b/net/DevExtreme.AspNet.Data.Tests.Common/RemoteGroupingStressHelper.cs index 51597bd9..298133a5 100644 --- a/net/DevExtreme.AspNet.Data.Tests.Common/RemoteGroupingStressHelper.cs +++ b/net/DevExtreme.AspNet.Data.Tests.Common/RemoteGroupingStressHelper.cs @@ -1,7 +1,6 @@ using System; using System.Collections.Generic; using System.Linq; -using System.Text; using Xunit; namespace DevExtreme.AspNet.Data.Tests { @@ -11,12 +10,18 @@ public static class RemoteGroupingStressHelper { const string PROP_NULL_NUM = nameof(IEntity.NullNum); const string PROP_DATE = nameof(IEntity.Date); const string PROP_NULL_DATE = nameof(IEntity.NullDate); +#if NET6_0_OR_GREATER + const string PROP_DATE_ONLY = nameof(IEntity.DateO); +#endif public interface IEntity { int Num { get; } int? NullNum { get; } DateTime Date { get; } DateTime? NullDate { get; } +#if NET6_0_OR_GREATER + DateOnly DateO { get; set; } +#endif } public static void Run(IQueryable data) where T : IEntity { @@ -36,7 +41,10 @@ static GroupingInfo[] BuildGroupParams() { new GroupingInfo { Selector = PROP_NUM }, new GroupingInfo { Selector = PROP_NULL_NUM }, new GroupingInfo { Selector = PROP_DATE }, - new GroupingInfo { Selector = PROP_NULL_DATE } + new GroupingInfo { Selector = PROP_NULL_DATE }, +#if NET6_0_OR_GREATER + new GroupingInfo { Selector = PROP_DATE_ONLY }, +#endif }; foreach(var interval in Enumerable.Range(1, 3).Select(i => (100 * i).ToString())) { diff --git a/net/DevExtreme.AspNet.Data.Tests.EFCore/RemoteGroupingStress.cs b/net/DevExtreme.AspNet.Data.Tests.EFCore/RemoteGroupingStress.cs index 8608ffe7..efdd0c62 100644 --- a/net/DevExtreme.AspNet.Data.Tests.EFCore/RemoteGroupingStress.cs +++ b/net/DevExtreme.AspNet.Data.Tests.EFCore/RemoteGroupingStress.cs @@ -15,6 +15,9 @@ public class DataItem : RemoteGroupingStressHelper.IEntity { public int? NullNum { get; set; } public DateTime Date { get; set; } public DateTime? NullDate { get; set; } +#if NET6_0_OR_GREATER + public DateOnly DateO { get; set; } +#endif } [Fact] diff --git a/net/DevExtreme.AspNet.Data.Tests.NH/RemoteGroupingStress.cs b/net/DevExtreme.AspNet.Data.Tests.NH/RemoteGroupingStress.cs index 0d28e1e7..76195742 100644 --- a/net/DevExtreme.AspNet.Data.Tests.NH/RemoteGroupingStress.cs +++ b/net/DevExtreme.AspNet.Data.Tests.NH/RemoteGroupingStress.cs @@ -13,6 +13,10 @@ public class DataItem : RemoteGroupingStressHelper.IEntity { public virtual int? NullNum { get; set; } public virtual DateTime Date { get; set; } public virtual DateTime? NullDate { get; set; } +#if NET6_0_OR_GREATER + // dummy interface implementation + public virtual DateOnly DateO { get; set; } +#endif } public class DataItemMap : ClassMap { @@ -23,10 +27,11 @@ public DataItemMap() { Map(i => i.NullNum); Map(i => i.Date); Map(i => i.NullDate); + //Map(i => i.DateO); //used by all fixtures, requires nh feature support (see skip) } } - [Fact] + [Fact(Skip = "Skip until https://github.com/nhibernate/nhibernate-core/issues/2912 is implemented?")] public async Task Scenario() { await SessionFactoryHelper.ExecAsync(session => { session.Save(new DataItem()); diff --git a/net/DevExtreme.AspNet.Data.Tests.Xpo/DevExtreme.AspNet.Data.Tests.Xpo.csproj b/net/DevExtreme.AspNet.Data.Tests.Xpo/DevExtreme.AspNet.Data.Tests.Xpo.csproj index 904fec4e..c273d591 100644 --- a/net/DevExtreme.AspNet.Data.Tests.Xpo/DevExtreme.AspNet.Data.Tests.Xpo.csproj +++ b/net/DevExtreme.AspNet.Data.Tests.Xpo/DevExtreme.AspNet.Data.Tests.Xpo.csproj @@ -1,11 +1,11 @@ - + net6.0 - + diff --git a/net/DevExtreme.AspNet.Data.Tests.Xpo/RemoteGroupingStress.cs b/net/DevExtreme.AspNet.Data.Tests.Xpo/RemoteGroupingStress.cs index a7e6d602..ae7ff87e 100644 --- a/net/DevExtreme.AspNet.Data.Tests.Xpo/RemoteGroupingStress.cs +++ b/net/DevExtreme.AspNet.Data.Tests.Xpo/RemoteGroupingStress.cs @@ -14,6 +14,9 @@ public class DataItem : XPLiteObject, RemoteGroupingStressHelper.IEntity { int? _nullNum; DateTime _date; DateTime? _nullDate; +#if NET6_0_OR_GREATER + DateOnly _dateO; +#endif public DataItem(Session session) : base(session) { @@ -45,9 +48,15 @@ public DateTime? NullDate { set { SetPropertyValue(nameof(NullDate), ref _nullDate, value); } } +#if NET6_0_OR_GREATER + public DateOnly DateO { + get { return _dateO; } + set { SetPropertyValue(nameof(DateO), ref _dateO, value); } + } +#endif } - [Fact] + [Fact(Skip = "Skip until proper DevExpress.Xpo dll / nupkg with Date Time Only support?")] public async Task Scenario() { await UnitOfWorkHelper.ExecAsync(uow => { new DataItem(uow); From f2b2bdcff22871fce5bf9ffefd2960ba4a8b833b Mon Sep 17 00:00:00 2001 From: Mikhail Preyskurantov Date: Fri, 5 Apr 2024 20:45:30 +0300 Subject: [PATCH 05/11] remote grouping test for ef >= 8 (try apply fixes for less targets like in sample) --- .../RemoteGroupingStressHelper.cs | 6 +++--- .../RemoteGroupingStress.cs | 2 +- .../RemoteGroupingStress.cs | 4 ++-- .../RemoteGroupingStress.cs | 8 ++++---- 4 files changed, 10 insertions(+), 10 deletions(-) diff --git a/net/DevExtreme.AspNet.Data.Tests.Common/RemoteGroupingStressHelper.cs b/net/DevExtreme.AspNet.Data.Tests.Common/RemoteGroupingStressHelper.cs index 298133a5..a772ceaa 100644 --- a/net/DevExtreme.AspNet.Data.Tests.Common/RemoteGroupingStressHelper.cs +++ b/net/DevExtreme.AspNet.Data.Tests.Common/RemoteGroupingStressHelper.cs @@ -10,7 +10,7 @@ public static class RemoteGroupingStressHelper { const string PROP_NULL_NUM = nameof(IEntity.NullNum); const string PROP_DATE = nameof(IEntity.Date); const string PROP_NULL_DATE = nameof(IEntity.NullDate); -#if NET6_0_OR_GREATER +#if EFCORE8 || EFCORE9 const string PROP_DATE_ONLY = nameof(IEntity.DateO); #endif @@ -19,7 +19,7 @@ public interface IEntity { int? NullNum { get; } DateTime Date { get; } DateTime? NullDate { get; } -#if NET6_0_OR_GREATER +#if EFCORE8 || EFCORE9 DateOnly DateO { get; set; } #endif } @@ -42,7 +42,7 @@ static GroupingInfo[] BuildGroupParams() { new GroupingInfo { Selector = PROP_NULL_NUM }, new GroupingInfo { Selector = PROP_DATE }, new GroupingInfo { Selector = PROP_NULL_DATE }, -#if NET6_0_OR_GREATER +#if EFCORE8 || EFCORE9 new GroupingInfo { Selector = PROP_DATE_ONLY }, #endif }; diff --git a/net/DevExtreme.AspNet.Data.Tests.EFCore/RemoteGroupingStress.cs b/net/DevExtreme.AspNet.Data.Tests.EFCore/RemoteGroupingStress.cs index efdd0c62..3ec402e8 100644 --- a/net/DevExtreme.AspNet.Data.Tests.EFCore/RemoteGroupingStress.cs +++ b/net/DevExtreme.AspNet.Data.Tests.EFCore/RemoteGroupingStress.cs @@ -15,7 +15,7 @@ public class DataItem : RemoteGroupingStressHelper.IEntity { public int? NullNum { get; set; } public DateTime Date { get; set; } public DateTime? NullDate { get; set; } -#if NET6_0_OR_GREATER +#if EFCORE8 || EFCORE9 public DateOnly DateO { get; set; } #endif } diff --git a/net/DevExtreme.AspNet.Data.Tests.NH/RemoteGroupingStress.cs b/net/DevExtreme.AspNet.Data.Tests.NH/RemoteGroupingStress.cs index 76195742..6f0dc7aa 100644 --- a/net/DevExtreme.AspNet.Data.Tests.NH/RemoteGroupingStress.cs +++ b/net/DevExtreme.AspNet.Data.Tests.NH/RemoteGroupingStress.cs @@ -13,10 +13,10 @@ public class DataItem : RemoteGroupingStressHelper.IEntity { public virtual int? NullNum { get; set; } public virtual DateTime Date { get; set; } public virtual DateTime? NullDate { get; set; } -#if NET6_0_OR_GREATER +//#if EFCORE8 || EFCORE9 // dummy interface implementation public virtual DateOnly DateO { get; set; } -#endif +//#endif } public class DataItemMap : ClassMap { diff --git a/net/DevExtreme.AspNet.Data.Tests.Xpo/RemoteGroupingStress.cs b/net/DevExtreme.AspNet.Data.Tests.Xpo/RemoteGroupingStress.cs index ae7ff87e..e5473f63 100644 --- a/net/DevExtreme.AspNet.Data.Tests.Xpo/RemoteGroupingStress.cs +++ b/net/DevExtreme.AspNet.Data.Tests.Xpo/RemoteGroupingStress.cs @@ -14,9 +14,9 @@ public class DataItem : XPLiteObject, RemoteGroupingStressHelper.IEntity { int? _nullNum; DateTime _date; DateTime? _nullDate; -#if NET6_0_OR_GREATER +//#if EFCORE8 || EFCORE9 DateOnly _dateO; -#endif +//#endif public DataItem(Session session) : base(session) { @@ -48,12 +48,12 @@ public DateTime? NullDate { set { SetPropertyValue(nameof(NullDate), ref _nullDate, value); } } -#if NET6_0_OR_GREATER +//#if EFCORE8 || EFCORE9 public DateOnly DateO { get { return _dateO; } set { SetPropertyValue(nameof(DateO), ref _dateO, value); } } -#endif +//#endif } [Fact(Skip = "Skip until proper DevExpress.Xpo dll / nupkg with Date Time Only support?")] From d59ca7d9ba92a0570bd93632aab8983fbf1af33f Mon Sep 17 00:00:00 2001 From: Mikhail Preyskurantov Date: Fri, 5 Apr 2024 20:47:53 +0300 Subject: [PATCH 06/11] Lint --- net/Sample/SQL.txt | 2 +- net/Sample/Sample.csproj | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/net/Sample/SQL.txt b/net/Sample/SQL.txt index 64e8fb8b..63128f5f 100644 --- a/net/Sample/SQL.txt +++ b/net/Sample/SQL.txt @@ -15,4 +15,4 @@ UPDATE [Orders] SET [OrderDateTimeOnly] = CONVERT(time, DATEADD(hour, ([OrderID] dotnet add package Microsoft.EntityFrameworkCore.Tools dotnet add package Microsoft.EntityFrameworkCore.SqlServer -Scaffold-DbContext "Data Source=(localdb)\MSSQLLocalDB; Database=Northwind; Integrated Security=True; MultipleActiveResultSets=True; App=EntityFramework" Microsoft.EntityFrameworkCore.SqlServer -OutputDir Models \ No newline at end of file +Scaffold-DbContext "Data Source=(localdb)\MSSQLLocalDB; Database=Northwind; Integrated Security=True; MultipleActiveResultSets=True; App=EntityFramework" Microsoft.EntityFrameworkCore.SqlServer -OutputDir Models diff --git a/net/Sample/Sample.csproj b/net/Sample/Sample.csproj index bb6beea5..a22894d5 100644 --- a/net/Sample/Sample.csproj +++ b/net/Sample/Sample.csproj @@ -28,7 +28,7 @@ - + NET8.0 @@ -39,7 +39,7 @@ From 24b2008f0b66bc056c7496d70c143a300689391f Mon Sep 17 00:00:00 2001 From: Mikhail Preyskurantov Date: Fri, 5 Apr 2024 21:24:04 +0300 Subject: [PATCH 07/11] temp exclude Sample from sln --- net/DevExtreme.AspNet.Data.sln | 6 ------ 1 file changed, 6 deletions(-) diff --git a/net/DevExtreme.AspNet.Data.sln b/net/DevExtreme.AspNet.Data.sln index e35b0f1f..bd3d15fb 100644 --- a/net/DevExtreme.AspNet.Data.sln +++ b/net/DevExtreme.AspNet.Data.sln @@ -14,8 +14,6 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "DevExtreme.AspNet.Data", "D EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "DevExtreme.AspNet.Data.Tests", "DevExtreme.AspNet.Data.Tests\DevExtreme.AspNet.Data.Tests.csproj", "{BFF5CDCB-B8E0-4D4C-BCEB-18651691E1E1}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sample", "Sample\Sample.csproj", "{760B3927-BB40-4D5B-B64C-880E75E4A4A5}" -EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "DevExtreme.AspNet.Data.Tests.NET4", "DevExtreme.AspNet.Data.Tests.NET4\DevExtreme.AspNet.Data.Tests.NET4.csproj", "{D083C7D4-E8EC-409F-8B45-512FABB21A54}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "DevExtreme.AspNet.Data.Tests.EF6", "DevExtreme.AspNet.Data.Tests.EF6\DevExtreme.AspNet.Data.Tests.EF6.csproj", "{C401BB6E-D21B-45D5-AB98-6B308DB4E4FB}" @@ -54,10 +52,6 @@ Global {BFF5CDCB-B8E0-4D4C-BCEB-18651691E1E1}.Debug|Any CPU.Build.0 = Debug|Any CPU {BFF5CDCB-B8E0-4D4C-BCEB-18651691E1E1}.Release|Any CPU.ActiveCfg = Release|Any CPU {BFF5CDCB-B8E0-4D4C-BCEB-18651691E1E1}.Release|Any CPU.Build.0 = Release|Any CPU - {760B3927-BB40-4D5B-B64C-880E75E4A4A5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {760B3927-BB40-4D5B-B64C-880E75E4A4A5}.Debug|Any CPU.Build.0 = Debug|Any CPU - {760B3927-BB40-4D5B-B64C-880E75E4A4A5}.Release|Any CPU.ActiveCfg = Release|Any CPU - {760B3927-BB40-4D5B-B64C-880E75E4A4A5}.Release|Any CPU.Build.0 = Release|Any CPU {D083C7D4-E8EC-409F-8B45-512FABB21A54}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {D083C7D4-E8EC-409F-8B45-512FABB21A54}.Debug|Any CPU.Build.0 = Debug|Any CPU {D083C7D4-E8EC-409F-8B45-512FABB21A54}.Release|Any CPU.ActiveCfg = Release|Any CPU From 84a35aff2ff229eca2824525b76e02a074fbde45 Mon Sep 17 00:00:00 2001 From: Mikhail Preyskurantov Date: Mon, 8 Apr 2024 17:14:05 +0300 Subject: [PATCH 08/11] Revert "temp exclude Sample from sln" This reverts commit 24b2008f0b66bc056c7496d70c143a300689391f. --- net/DevExtreme.AspNet.Data.sln | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/net/DevExtreme.AspNet.Data.sln b/net/DevExtreme.AspNet.Data.sln index bd3d15fb..e35b0f1f 100644 --- a/net/DevExtreme.AspNet.Data.sln +++ b/net/DevExtreme.AspNet.Data.sln @@ -14,6 +14,8 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "DevExtreme.AspNet.Data", "D EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "DevExtreme.AspNet.Data.Tests", "DevExtreme.AspNet.Data.Tests\DevExtreme.AspNet.Data.Tests.csproj", "{BFF5CDCB-B8E0-4D4C-BCEB-18651691E1E1}" EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sample", "Sample\Sample.csproj", "{760B3927-BB40-4D5B-B64C-880E75E4A4A5}" +EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "DevExtreme.AspNet.Data.Tests.NET4", "DevExtreme.AspNet.Data.Tests.NET4\DevExtreme.AspNet.Data.Tests.NET4.csproj", "{D083C7D4-E8EC-409F-8B45-512FABB21A54}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "DevExtreme.AspNet.Data.Tests.EF6", "DevExtreme.AspNet.Data.Tests.EF6\DevExtreme.AspNet.Data.Tests.EF6.csproj", "{C401BB6E-D21B-45D5-AB98-6B308DB4E4FB}" @@ -52,6 +54,10 @@ Global {BFF5CDCB-B8E0-4D4C-BCEB-18651691E1E1}.Debug|Any CPU.Build.0 = Debug|Any CPU {BFF5CDCB-B8E0-4D4C-BCEB-18651691E1E1}.Release|Any CPU.ActiveCfg = Release|Any CPU {BFF5CDCB-B8E0-4D4C-BCEB-18651691E1E1}.Release|Any CPU.Build.0 = Release|Any CPU + {760B3927-BB40-4D5B-B64C-880E75E4A4A5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {760B3927-BB40-4D5B-B64C-880E75E4A4A5}.Debug|Any CPU.Build.0 = Debug|Any CPU + {760B3927-BB40-4D5B-B64C-880E75E4A4A5}.Release|Any CPU.ActiveCfg = Release|Any CPU + {760B3927-BB40-4D5B-B64C-880E75E4A4A5}.Release|Any CPU.Build.0 = Release|Any CPU {D083C7D4-E8EC-409F-8B45-512FABB21A54}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {D083C7D4-E8EC-409F-8B45-512FABB21A54}.Debug|Any CPU.Build.0 = Debug|Any CPU {D083C7D4-E8EC-409F-8B45-512FABB21A54}.Release|Any CPU.ActiveCfg = Release|Any CPU From b31c6d4295ad467932454310918723ba6b0a6150 Mon Sep 17 00:00:00 2001 From: Mikhail Preyskurantov Date: Mon, 8 Apr 2024 17:30:36 +0300 Subject: [PATCH 09/11] LibraryManager may fail on CI (likely because of multi target), possibly https://github.com/aspnet/LibraryManager/issues/514 --- net/Sample/Sample.csproj | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/net/Sample/Sample.csproj b/net/Sample/Sample.csproj index a22894d5..77c36022 100644 --- a/net/Sample/Sample.csproj +++ b/net/Sample/Sample.csproj @@ -7,7 +7,7 @@ - + @@ -38,10 +38,8 @@ - From 322fdb0c9e1ad26970e004eba1351ee423edaf92 Mon Sep 17 00:00:00 2001 From: Mikhail Preyskurantov Date: Mon, 8 Apr 2024 18:41:17 +0300 Subject: [PATCH 10/11] SQL Table Column Name --- net/Sample/SQL.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/net/Sample/SQL.txt b/net/Sample/SQL.txt index 63128f5f..813394dc 100644 --- a/net/Sample/SQL.txt +++ b/net/Sample/SQL.txt @@ -6,9 +6,9 @@ GO UPDATE [Orders] SET [OrderDateOnly] = CONVERT(date, [OrderDate]) GO ALTER TABLE [Orders] -ADD [OrderDateTimeOnly] time NULL +ADD [OrderTimeOnly] time NULL GO -UPDATE [Orders] SET [OrderDateTimeOnly] = CONVERT(time, DATEADD(hour, ([OrderID] + 1), [OrderDate])) +UPDATE [Orders] SET [OrderTimeOnly] = CONVERT(time, DATEADD(hour, ([OrderID] + 1), [OrderDate])) --- From 1af8e7dc215e0ae300c66a283837a2fd9c071ad6 Mon Sep 17 00:00:00 2001 From: Alex Lavrov Date: Tue, 9 Apr 2024 13:22:43 +0400 Subject: [PATCH 11/11] Sample: add filter panel, allow search in header filter --- net/Sample/Views/Home/Index.cshtml | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/net/Sample/Views/Home/Index.cshtml b/net/Sample/Views/Home/Index.cshtml index 2b821610..f455e4e6 100644 --- a/net/Sample/Views/Home/Index.cshtml +++ b/net/Sample/Views/Home/Index.cshtml @@ -77,7 +77,11 @@ groupPanel: { visible: true }, searchPanel: { visible: true }, filterRow: { visible: true }, - headerFilter: { visible: true }, + filterPanel: { visible: true }, + headerFilter: { + allowSearch: true, + visible: true + }, editing: { allowUpdating: true, allowAdding: true,