Skip to content

Commit 5100379

Browse files
committed
* replace #pragma warning (disable|restore) directives with [SuppressMessage] scoped attribute
+ four NuGet packages of Roslyn analyzer and disable some of rules in GlobalSuppressions.cs @ tbm.Shared.csproj @ c#
1 parent bb8a5ed commit 5100379

11 files changed

+129
-22
lines changed

c#/GlobalSuppressions.cs

+27-1
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,38 @@
33

44
[assembly: SuppressMessage("Major Code Smell", "S125:Sections of code should not be commented out")]
55
[assembly: SuppressMessage("Minor Code Smell", "S3604:Member initializer values should not be redundant")]
6+
[assembly: SuppressMessage("Critical Bug", "S6674:Log message template should be syntactically correct")]
67
[assembly: SuppressMessage("Roslynator", "RCS1001:Add braces (when expression spans over multiple lines).")]
78
[assembly: SuppressMessage("Roslynator", "RCS1139:Add summary element to documentation comment.")]
89
[assembly: SuppressMessage("Roslynator", "RCS1156:Use string.Length instead of comparison with empty string.")]
910
[assembly: SuppressMessage("Style", "VSTHRD200:Use \"Async\" suffix for async methods")]
10-
[assembly: SuppressMessage("Critical Bug", "S6674:Log message template should be syntactically correct")]
11+
[assembly: SuppressMessage("Style", "CC0061:Asynchronous method can be terminated with the 'Async' keyword.")]
12+
[assembly: SuppressMessage("Naming", "AV1755:Name of async method should end with Async or TaskAsync")]
13+
[assembly: SuppressMessage("Naming", "AV1706:Identifier contains an abbreviation or is too short")]
14+
[assembly: SuppressMessage("Maintainability", "AV1580:Method argument calls a nested method")]
15+
[assembly: SuppressMessage("Maintainability", "AV1500:Member or local function contains too many statements")]
16+
[assembly: SuppressMessage("Miscellaneous Design", "AV1210:Catch a specific exception instead of Exception, SystemException or ApplicationException")]
17+
[assembly: SuppressMessage("Design", "CC0031:Check for null before calling a delegate")]
18+
[assembly: SuppressMessage("Maintainability", "AV1561:Signature contains too many parameters")]
19+
[assembly: SuppressMessage("Design", "MA0051:Method is too long")]
20+
[assembly: SuppressMessage("Usage", "MA0004:Use Task.ConfigureAwait")]
21+
[assembly: SuppressMessage("Design", "CC0120:Your Switch maybe include default clause")]
22+
[assembly: SuppressMessage("Correctness", "SS019:Switch should have default label.")]
23+
[assembly: SuppressMessage("Maintainability", "AV1555:Avoid using non-(nullable-)boolean named arguments")]
24+
[assembly: SuppressMessage("Maintainability", "AV1535:Missing block in case or default clause of switch statement")]
25+
[assembly: SuppressMessage("Maintainability", "CC0097:You have missing/unexistent parameters in Xml Docs")]
26+
[assembly: SuppressMessage("Design", "MA0048:File name must match type name")]
27+
[assembly: SuppressMessage("Maintainability", "AV1507:File contains multiple types")]
28+
[assembly: SuppressMessage("Style", "MA0007:Add a comma after the last value")]
29+
[assembly: SuppressMessage("Style", "MA0003:Add parameter name to improve readability")]
30+
[assembly: SuppressMessage("Design", "CC0021:Use nameof")]
31+
[assembly: SuppressMessage("Naming", "AV1704:Identifier contains one or more digits in its name")]
32+
[assembly: SuppressMessage("Usage", "MA0006:Use String.Equals instead of equality operator")]
33+
[assembly: SuppressMessage("Maintainability", "AV1537:If-else-if construct should end with an unconditional else clause")]
34+
[assembly: SuppressMessage("Maintainability", "AV1554:Method contains optional parameter in type hierarchy")]
35+
[assembly: SuppressMessage("Maintainability", "AV1564:Parameter in public or internal member is of type bool or bool?")]
1136

37+
[assembly: SuppressMessage("StyleCop.CSharp.ReadabilityRules", "SA1101:Prefix local calls with this")]
1238
[assembly: SuppressMessage("StyleCop.CSharp.DocumentationRules", "SA1600:Elements should be documented")]
1339
[assembly: SuppressMessage("StyleCop.CSharp.DocumentationRules", "SA1601:Partial elements should be documented")]
1440
[assembly: SuppressMessage("StyleCop.CSharp.DocumentationRules", "SA1602:Enumeration items should be documented")]

c#/crawler/packages.lock.json

+25-1
Original file line numberDiff line numberDiff line change
@@ -108,11 +108,21 @@
108108
"Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0"
109109
}
110110
},
111+
"codecracker.CSharp": {
112+
"type": "Transitive",
113+
"resolved": "1.1.0",
114+
"contentHash": "s5KSzc65WjT+912x+OLGrW0jA/R8e67GRymQeVUfIJsBx+UJVnPShvaqM48G7oGYUTqVnpJElYjGX313yeSuIA=="
115+
},
111116
"CommunityToolkit.Diagnostics": {
112117
"type": "Transitive",
113118
"resolved": "8.2.2",
114119
"contentHash": "iILVyo7VvzTlQT7b2qOs1ZDcneKsmuy2mTuxCCaBWEfg3tjw35B/ImO9Xw6It7xi2ie8/2PWfXhFn+Prztg03w=="
115120
},
121+
"CSharpGuidelinesAnalyzer": {
122+
"type": "Transitive",
123+
"resolved": "3.8.4",
124+
"contentHash": "yfpcYXiPeyTRcifpYsk8Ez7GqhzBHF+cFxfo8fjH4jctQqr+shTfpOeE+4kj6+SNvJBZsBzYJ/3pi5aj+1q9Wg=="
125+
},
116126
"EFCore.NamingConventions": {
117127
"type": "Transitive",
118128
"resolved": "8.0.3",
@@ -148,6 +158,11 @@
148158
"resolved": "1.2.5",
149159
"contentHash": "+5UKyagtVX33TSeOGorYzDXus/ypAISfM7HFfrix4BEmuuGF+nhSjf8P9csejLQ79ny5ms33M5/lQ2SkwC0Jxw=="
150160
},
161+
"Meziantou.Analyzer": {
162+
"type": "Transitive",
163+
"resolved": "2.0.146",
164+
"contentHash": "pJ3k+3UjD2WwPsZR7fkgVYviXP3PCQM0hjwN1TuM4C0u1TuGKC9WdZCo0RAPZ+azhRPmYGSUjkjsN2fkQByghQ=="
165+
},
151166
"Microsoft.CodeAnalysis.NetAnalyzers": {
152167
"type": "Transitive",
153168
"resolved": "8.0.0",
@@ -527,6 +542,11 @@
527542
"resolved": "4.12.0",
528543
"contentHash": "0n7hlgpD57vKCC39iz6lLg6RIgPF6B2S0z7HzcRSkeu35svFKSGqKJhh2MfCsoHrrPMugnlMZI9NZwrkFPTqYA=="
529544
},
545+
"SharpSource": {
546+
"type": "Transitive",
547+
"resolved": "1.24.0",
548+
"contentHash": "W3FnCahaLO22Wm/1WVnWi19hhrTW9Q1Jav5aSXzF2WtBJixHmDs2H8vcNx7Fm2P1mYRUs9k7cNZLm2z5sOHKzQ=="
549+
},
530550
"SonarAnalyzer.CSharp": {
531551
"type": "Transitive",
532552
"resolved": "9.22.0.87781",
@@ -581,19 +601,23 @@
581601
"dependencies": {
582602
"Autofac": "[8.0.0, )",
583603
"Autofac.Extensions.DependencyInjection": "[9.0.0, )",
604+
"CSharpGuidelinesAnalyzer": "[3.8.4, )",
584605
"CommunityToolkit.Diagnostics": "[8.2.2, )",
585606
"EFCore.NamingConventions": "[8.0.3, )",
586607
"IDisposableAnalyzers": "[4.0.7, )",
608+
"Meziantou.Analyzer": "[2.0.146, )",
587609
"Microsoft.CodeAnalysis.NetAnalyzers": "[8.0.0, )",
588610
"Microsoft.EntityFrameworkCore": "[8.0.3, )",
589611
"Microsoft.Extensions.Hosting": "[8.0.0, )",
590612
"Microsoft.VisualStudio.Threading.Analyzers": "[17.9.28, )",
591613
"NLog.Extensions.Logging": "[5.3.8, )",
592614
"Pomelo.EntityFrameworkCore.MySql": "[8.0.2, )",
593615
"Roslynator.Analyzers": "[4.12.0, )",
616+
"SharpSource": "[1.24.0, )",
594617
"SonarAnalyzer.CSharp": "[9.22.0.87781, )",
595618
"StyleCop.Analyzers.Unstable": "[1.2.0.556, )",
596-
"SuperLinq": "[5.4.0, )"
619+
"SuperLinq": "[5.4.0, )",
620+
"codecracker.CSharp": "[1.1.0, )"
597621
}
598622
}
599623
}

c#/crawler/src/Db/CrawlerDbContext.cs

+1-2
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@ public void TimestampingEntities() =>
6060
}
6161
});
6262

63-
#pragma warning disable IDE0058 // Expression value is never used
63+
[SuppressMessage("Style", "IDE0058:Expression value is never used")]
6464
protected override void OnModelCreating(ModelBuilder b)
6565
{
6666
base.OnModelCreating(b);
@@ -101,7 +101,6 @@ protected override void OnModelCreating(ModelBuilder b)
101101
.HasKey(e => new {e.Fid, e.Portrait, e.DiscoveredAt, e.ModeratorTypes});
102102
b.Entity<Forum>().ToTable("tbm_forum");
103103
}
104-
#pragma warning restore IDE0058 // Expression value is never used
105104

106105
public class ModelCacheKeyFactory : IModelCacheKeyFactory
107106
{ // https://stackoverflow.com/questions/51864015/entity-framework-map-model-class-to-table-at-run-time/51899590#51899590

c#/crawler/src/EntryPoint.cs

+2-2
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,11 @@
33
using Microsoft.Extensions.DependencyInjection.Extensions;
44
using Microsoft.Extensions.Http;
55

6-
#pragma warning disable IDE0058 // Expression value is never used
7-
86
namespace tbm.Crawler;
97

108
public class EntryPoint : BaseEntryPoint
119
{
10+
[SuppressMessage("Style", "IDE0058:Expression value is never used")]
1211
protected override void ConfigureServices(HostBuilderContext context, IServiceCollection service)
1312
{
1413
service.AddHostedService<ResumeSuspendPostContentsPushingWorker>();
@@ -32,6 +31,7 @@ protected override void ConfigureServices(HostBuilderContext context, IServiceCo
3231
service.RemoveAll<IHttpMessageHandlerBuilderFilter>();
3332
}
3433

34+
[SuppressMessage("Style", "IDE0058:Expression value is never used")]
3535
protected override void ConfigureContainer(HostBuilderContext context, ContainerBuilder builder)
3636
{
3737
var baseClassOfClassesToBeRegistered = new[]

c#/crawler/src/Tieba/Crawl/Parser/ReplyParser.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ protected override ReplyPost Convert(Reply inPost)
3838
{
3939
c.OriginSrc = urlFilename;
4040
}
41-
else if (uri.Host is not "tb2.bdstatic.com") // http://tb2.bdstatic.com/tb/cms/commonsub/editor/images/qw_cat_small/qw_cat_0001.gif
41+
else if (uri.Host != "tb2.bdstatic.com") // http://tb2.bdstatic.com/tb/cms/commonsub/editor/images/qw_cat_small/qw_cat_0001.gif
4242
{
4343
logger.LogInformation("Detected an image in the content of reply with pid {} references to {}"
4444
+ " instead of common domains of tieba image hosting service, content={}",

c#/imagePipeline/packages.lock.json

+25-1
Original file line numberDiff line numberDiff line change
@@ -133,11 +133,21 @@
133133
"Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0"
134134
}
135135
},
136+
"codecracker.CSharp": {
137+
"type": "Transitive",
138+
"resolved": "1.1.0",
139+
"contentHash": "s5KSzc65WjT+912x+OLGrW0jA/R8e67GRymQeVUfIJsBx+UJVnPShvaqM48G7oGYUTqVnpJElYjGX313yeSuIA=="
140+
},
136141
"CommunityToolkit.Diagnostics": {
137142
"type": "Transitive",
138143
"resolved": "8.2.2",
139144
"contentHash": "iILVyo7VvzTlQT7b2qOs1ZDcneKsmuy2mTuxCCaBWEfg3tjw35B/ImO9Xw6It7xi2ie8/2PWfXhFn+Prztg03w=="
140145
},
146+
"CSharpGuidelinesAnalyzer": {
147+
"type": "Transitive",
148+
"resolved": "3.8.4",
149+
"contentHash": "yfpcYXiPeyTRcifpYsk8Ez7GqhzBHF+cFxfo8fjH4jctQqr+shTfpOeE+4kj6+SNvJBZsBzYJ/3pi5aj+1q9Wg=="
150+
},
141151
"EFCore.NamingConventions": {
142152
"type": "Transitive",
143153
"resolved": "8.0.3",
@@ -153,6 +163,11 @@
153163
"resolved": "4.0.7",
154164
"contentHash": "Xrn/VABG/JhulJOmHOeOAY4/qafbEyRj3Z6gMeSABT1XCqMe8HnqOvid8gEVJt47VUZ6eD7XpTFLZ1KLyTZgdw=="
155165
},
166+
"Meziantou.Analyzer": {
167+
"type": "Transitive",
168+
"resolved": "2.0.146",
169+
"contentHash": "pJ3k+3UjD2WwPsZR7fkgVYviXP3PCQM0hjwN1TuM4C0u1TuGKC9WdZCo0RAPZ+azhRPmYGSUjkjsN2fkQByghQ=="
170+
},
156171
"Microsoft.Bcl.AsyncInterfaces": {
157172
"type": "Transitive",
158173
"resolved": "7.0.0",
@@ -616,6 +631,11 @@
616631
"resolved": "0.33.0",
617632
"contentHash": "FlHfpTAADzaSlVCBF33iKJk9UhOr3Xj+r5LXbW2GzqYr0SrhiOf6shLX2LC2fqs7g7d+YlwKbBXqWFtb+e7icw=="
618633
},
634+
"SharpSource": {
635+
"type": "Transitive",
636+
"resolved": "1.24.0",
637+
"contentHash": "W3FnCahaLO22Wm/1WVnWi19hhrTW9Q1Jav5aSXzF2WtBJixHmDs2H8vcNx7Fm2P1mYRUs9k7cNZLm2z5sOHKzQ=="
638+
},
619639
"SonarAnalyzer.CSharp": {
620640
"type": "Transitive",
621641
"resolved": "9.22.0.87781",
@@ -914,19 +934,23 @@
914934
"dependencies": {
915935
"Autofac": "[8.0.0, )",
916936
"Autofac.Extensions.DependencyInjection": "[9.0.0, )",
937+
"CSharpGuidelinesAnalyzer": "[3.8.4, )",
917938
"CommunityToolkit.Diagnostics": "[8.2.2, )",
918939
"EFCore.NamingConventions": "[8.0.3, )",
919940
"IDisposableAnalyzers": "[4.0.7, )",
941+
"Meziantou.Analyzer": "[2.0.146, )",
920942
"Microsoft.CodeAnalysis.NetAnalyzers": "[8.0.0, )",
921943
"Microsoft.EntityFrameworkCore": "[8.0.3, )",
922944
"Microsoft.Extensions.Hosting": "[8.0.0, )",
923945
"Microsoft.VisualStudio.Threading.Analyzers": "[17.9.28, )",
924946
"NLog.Extensions.Logging": "[5.3.8, )",
925947
"Pomelo.EntityFrameworkCore.MySql": "[8.0.2, )",
926948
"Roslynator.Analyzers": "[4.12.0, )",
949+
"SharpSource": "[1.24.0, )",
927950
"SonarAnalyzer.CSharp": "[9.22.0.87781, )",
928951
"StyleCop.Analyzers.Unstable": "[1.2.0.556, )",
929-
"SuperLinq": "[5.4.0, )"
952+
"SuperLinq": "[5.4.0, )",
953+
"codecracker.CSharp": "[1.1.0, )"
930954
}
931955
}
932956
}

c#/imagePipeline/src/EntryPoint.cs

+2-2
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,11 @@
33
using Microsoft.Extensions.DependencyInjection.Extensions;
44
using Microsoft.Extensions.Http;
55

6-
#pragma warning disable IDE0058 // Expression value is never used
7-
86
namespace tbm.ImagePipeline;
97

108
public partial class EntryPoint : BaseEntryPoint
119
{
10+
[SuppressMessage("Style", "IDE0058:Expression value is never used")]
1211
protected override void ConfigureServices(HostBuilderContext context, IServiceCollection service)
1312
{
1413
service.AddHostedService<ImageBatchConsumingWorker>();
@@ -51,6 +50,7 @@ protected override void ConfigureServices(HostBuilderContext context, IServiceCo
5150
service.RemoveAll<IHttpMessageHandlerBuilderFilter>();
5251
}
5352

53+
[SuppressMessage("Style", "IDE0058:Expression value is never used")]
5454
protected override void ConfigureContainer(HostBuilderContext context, ContainerBuilder builder)
5555
{
5656
builder.RegisterType<ImagePipelineDbContext>();

c#/shared/packages.lock.json

+24
Original file line numberDiff line numberDiff line change
@@ -21,12 +21,24 @@
2121
"Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0"
2222
}
2323
},
24+
"codecracker.CSharp": {
25+
"type": "Direct",
26+
"requested": "[1.1.0, )",
27+
"resolved": "1.1.0",
28+
"contentHash": "s5KSzc65WjT+912x+OLGrW0jA/R8e67GRymQeVUfIJsBx+UJVnPShvaqM48G7oGYUTqVnpJElYjGX313yeSuIA=="
29+
},
2430
"CommunityToolkit.Diagnostics": {
2531
"type": "Direct",
2632
"requested": "[8.2.2, )",
2733
"resolved": "8.2.2",
2834
"contentHash": "iILVyo7VvzTlQT7b2qOs1ZDcneKsmuy2mTuxCCaBWEfg3tjw35B/ImO9Xw6It7xi2ie8/2PWfXhFn+Prztg03w=="
2935
},
36+
"CSharpGuidelinesAnalyzer": {
37+
"type": "Direct",
38+
"requested": "[3.8.4, )",
39+
"resolved": "3.8.4",
40+
"contentHash": "yfpcYXiPeyTRcifpYsk8Ez7GqhzBHF+cFxfo8fjH4jctQqr+shTfpOeE+4kj6+SNvJBZsBzYJ/3pi5aj+1q9Wg=="
41+
},
3042
"EFCore.NamingConventions": {
3143
"type": "Direct",
3244
"requested": "[8.0.3, )",
@@ -44,6 +56,12 @@
4456
"resolved": "4.0.7",
4557
"contentHash": "Xrn/VABG/JhulJOmHOeOAY4/qafbEyRj3Z6gMeSABT1XCqMe8HnqOvid8gEVJt47VUZ6eD7XpTFLZ1KLyTZgdw=="
4658
},
59+
"Meziantou.Analyzer": {
60+
"type": "Direct",
61+
"requested": "[2.0.146, )",
62+
"resolved": "2.0.146",
63+
"contentHash": "pJ3k+3UjD2WwPsZR7fkgVYviXP3PCQM0hjwN1TuM4C0u1TuGKC9WdZCo0RAPZ+azhRPmYGSUjkjsN2fkQByghQ=="
64+
},
4765
"Microsoft.CodeAnalysis.NetAnalyzers": {
4866
"type": "Direct",
4967
"requested": "[8.0.0, )",
@@ -125,6 +143,12 @@
125143
"resolved": "4.12.0",
126144
"contentHash": "0n7hlgpD57vKCC39iz6lLg6RIgPF6B2S0z7HzcRSkeu35svFKSGqKJhh2MfCsoHrrPMugnlMZI9NZwrkFPTqYA=="
127145
},
146+
"SharpSource": {
147+
"type": "Direct",
148+
"requested": "[1.24.0, )",
149+
"resolved": "1.24.0",
150+
"contentHash": "W3FnCahaLO22Wm/1WVnWi19hhrTW9Q1Jav5aSXzF2WtBJixHmDs2H8vcNx7Fm2P1mYRUs9k7cNZLm2z5sOHKzQ=="
151+
},
128152
"SonarAnalyzer.CSharp": {
129153
"type": "Direct",
130154
"requested": "[9.22.0.87781, )",

c#/shared/src/ErrorableWorker.cs

+2
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,9 @@
33

44
namespace tbm.Shared;
55

6+
#pragma warning disable AV1564 // Parameter in public or internal member is of type bool or bool?
67
public abstract class ErrorableWorker(bool shouldExitOnException = false, bool shouldExitOnFinish = false)
8+
#pragma warning restore AV1564 // Parameter in public or internal member is of type bool or bool?
79
: BackgroundService
810
{
911
// ReSharper disable UnusedAutoPropertyAccessor.Global

c#/shared/src/TbmDbContext.cs

+8-6
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
using System.Data;
22
using System.Data.Common;
3+
using System.Diagnostics.CodeAnalysis;
34
using Microsoft.EntityFrameworkCore;
45
using Microsoft.EntityFrameworkCore.Diagnostics;
56
using Microsoft.EntityFrameworkCore.Infrastructure;
@@ -14,6 +15,7 @@ public abstract class TbmDbContext : DbContext
1415
{
1516
protected static readonly SelectForUpdateCommandInterceptor SelectForUpdateCommandInterceptorInstance = new();
1617

18+
[SuppressMessage("Style", "CC0072:Remove Async termination when method is not asynchronous.", Justification = "https://github.com/code-cracker/code-cracker/issues/1086")]
1719
protected sealed class SelectForUpdateCommandInterceptor : DbCommandInterceptor
1820
{ // https://stackoverflow.com/questions/37984312/how-to-implement-select-for-update-in-ef-core/75086260#75086260
1921
public override InterceptionResult<object> ScalarExecuting
@@ -65,12 +67,12 @@ public class TbmDbContext<TModelCacheKeyFactory> : TbmDbContext
6567
public DbSet<ImageInReply> ImageInReplies => Set<ImageInReply>();
6668
public DbSet<ReplyContentImage> ReplyContentImages => Set<ReplyContentImage>();
6769

68-
#pragma warning disable IDE0058 // Expression value is never used
69-
#pragma warning disable S927 // Parameter names should match base declaration and other partial definitions
70+
[SuppressMessage("Critical Code Smell", "S927:Parameter names should match base declaration and other partial definitions")]
71+
[SuppressMessage("Style", "IDE0058:Expression value is never used")]
7072
protected override void OnConfiguring(DbContextOptionsBuilder options)
7173
{
72-
var connectionStr = Config.GetConnectionString("Main");
73-
options.UseMySql(connectionStr!, ServerVersion.AutoDetect(connectionStr), OnConfiguringMysql)
74+
var connectionString = Config.GetConnectionString("Main");
75+
options.UseMySql(connectionString!, ServerVersion.AutoDetect(connectionString), OnConfiguringMysql)
7476
.ReplaceService<IModelCacheKeyFactory, TModelCacheKeyFactory>()
7577
.AddInterceptors(SelectForUpdateCommandInterceptorInstance)
7678
.UseCamelCaseNamingConvention();
@@ -86,6 +88,8 @@ protected override void OnConfiguring(DbContextOptionsBuilder options)
8688
if (dbSettings.GetValue("EnableSensitiveDataLogging", false)) options.EnableSensitiveDataLogging();
8789
}
8890

91+
[SuppressMessage("Critical Code Smell", "S927:Parameter names should match base declaration and other partial definitions")]
92+
[SuppressMessage("Style", "IDE0058:Expression value is never used")]
8993
protected override void OnModelCreating(ModelBuilder b)
9094
{
9195
b.Entity<ImageInReply>().ToTable("tbmi_imageInReply");
@@ -95,8 +99,6 @@ protected override void OnModelCreating(ModelBuilder b)
9599

96100
protected void OnModelCreatingWithFid(ModelBuilder b, uint fid) =>
97101
b.Entity<ReplyContentImage>().ToTable($"tbmc_f{fid}_reply_content_image");
98-
#pragma warning restore S927 // Parameter names should match base declaration and other partial definitions
99-
#pragma warning restore IDE0058 // Expression value is never used
100102

101103
protected virtual void OnConfiguringMysql(MySqlDbContextOptionsBuilder builder) { }
102104
}

0 commit comments

Comments
 (0)