Skip to content

Commit 151215e

Browse files
authored
Merge branch 'master' into upstream/SqlTruncateTable
2 parents fb11886 + a4e02e6 commit 151215e

302 files changed

Lines changed: 2563 additions & 2683 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.
Lines changed: 30 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -1,50 +1,42 @@
1-
[main] ThreadSafeCache is removed
1+
[main] ThreadSafeCache, ThreadSafeDictionary, ThreadSafeList collections are removed
22
[main] INamedValueCollection and its the only implementer NamedValueCollection are removed
33
[main] ICollectionChangeNotifier, CollectionChangeNotifierEventArgs are removed
4-
[main] ArrayUtils class is removed
5-
[main] ISet<T> interface is removed and all usages are replaced with .Net ISet<T>
6-
[main] Set<T>, SetSlim<T>, ReadOnlySet<T> collections and abstract SetBase are removed
7-
[main] ReadOnlyList<T> is removed
8-
[main] ReadOnlyCollection<T>
9-
[main] ReadOnlyDictionary<TKey, TValue> is removed
10-
[main] ThreadSafeDictionary is removed
11-
[main] ThreadSafeList struct is removed
12-
[main] TypeClassifier collection is removed
13-
[main] LazyDictionary is removed
14-
[main] FlagRegistry is removed
15-
[main] EnumerableUtils<T> is removed
16-
[main] DifferentialDictionary and DifferentialDictionaryDifference are removed
4+
[main] ArrayUtils and EnumerableUtils<T> are removed
5+
[main] ISet<T> interface is removed and all usages are replaced with System.Collections.Generic.ISet<T>
6+
[main] Set<T>, SetSlim<T>, ReadOnlySet<T> collections and abstract SetBase class are removed
7+
[main] ReadOnlyList<T>, ReadOnlyCollection<T>, ReadOnlyDictionary<TKey, TValue> collections are removed
8+
[main] ThreadSafeCached type is removed
9+
[main] Triplet<T> and Triplet<TFirst,TSecond,TThird> are removed
10+
[main] TypeClassifier, LazyDictionary and FlagRegistry collections are removed
11+
[main] DifferentialDictionary and DifferentialDictionaryDifference types are removed
1712
[main] CollectionBase<T> is removed
1813
[main] StringExtensions.Join() methods are removed
1914
[main] CollectionExtensions.ReverseList() method is removed
20-
[main] ThreadSafeCached type is removed
21-
[main] Triplet<T> and Triplet<TFirst,TSecond,TThird> are removed
2215
[main] SqlTranslator/SqlCompiler APIs were significantly changed in order to improve memory usage and perfromance
2316
[main] Introduced IQueryable<T>.Tag() extensions allowing to add tags to result SQL statement
2417
[main] Introduced Session.Tag() method for being able to tag queries within returned TagScope
25-
[main] Domain.TagsEnabled is introduced as faster alternative to DomainConfiguration.TagLocation!=TagLocation.Nowhere check
26-
[main] ReadOnlyHashSet<T> now implements .Net ISet and IReadOnlySet instead of removed ISet and IReadOnly
18+
[main] Domain.TagsEnabled is introduced as easier alternative to DomainConfiguration.TagLocation!=TagLocation.Nowhere check
2719
[main] NativeTypeClassifier collection now inherits ClassifiedCollection directly
28-
[main] FlagCollection.Keys return type has changed from removed ReadOnlyList<T> to .Net IReadOnlyList<T>
20+
[main] FlagCollection.Keys no returns .Net IReadOnlyList<TKey>
2921
[main] CollectionBaseSlim<T> no longer implements IList<T> and ICollection but implements ICollection<T> and IReadOnlyList<T>
3022
[main] AggregateException.Exceptions property changed its return type to IReadOnlyList<Exception>
3123
[main] AggregateException constuctors get array of exceptions instead of IEnumerable<Exception>
3224
[main] CopyDataHint.CopiedColumns property changed its return type to IReadOnlyList<Pair<string>>
33-
[main] DateHint.Identitites property changed its return type to IReadOnlyList<IdentityPair>
34-
[main] UpdateDataHint.UpdateParameter property changed its return type to IReadOnlyList<Pair<string, object>>
25+
[main] DateHint.Identitites property changed return type to IReadOnlyList<IdentityPair>
26+
[main] UpdateDataHint.UpdateParameter property changed return type to IReadOnlyList<Pair<string, object>>
3527
[main] IUpgrader methods now return IReadOnlyList<NodeAction>
36-
[main] PropertyAccessorDictionary has changed API due to change its base type and interfaces
28+
[main] PropertyAccessorDictionary has changed API due to change of the base type and interfaces
3729
[main] FullTextIndexDefCollection changed its base type to CollectionBaseSlim<FullTextIndexDef>
38-
[main] HierarchyDefCollection changed its base type to CollectionBaseSlim<HierarchyDef>
30+
[main] HierarchyDefCollection base type changed to CollectionBaseSlim<HierarchyDef>
3931
[main] HierarchyDefCollection and TypeDefCollection changed events set due to change of base type
4032
[main] SessionConfiguration collection API changed due to changes in base type CollectionBaseSlim<T>
41-
[main] IGenerationTerm.Terms changed its return type to IReadOnlyList<string>
42-
[main] IProximityTerm.Terms changed its return type to IReadOnlyList<IProximityOperand>
33+
[main] IGenerationTerm.Terms property changed return type to IReadOnlyList<string>
34+
[main] IProximityTerm.Terms property changed its return type to IReadOnlyList<IProximityOperand>
4335
[main] IOperation properties (PrecedingOperations, FollowingOperations, UndoOperations, IdentifiedEntities) changed return type
44-
[main] HierarchyInfo.Types changed its return type to IReadOnlyList<TypeInfo>
45-
[main] IndexInfo.Columns changed its return type to IReadOnlyList<ColumnInfo>
36+
[main] HierarchyInfo.Types property changed return type to IReadOnlyList<TypeInfo>
37+
[main] IndexInfo.Columns property return type changed to IReadOnlyList<ColumnInfo>
4638
[main] KeyInfo's Fields and Columns properties changed to ReadOnlyList<FieldInfo> and IReadOnlyList<ColumnInfo> respectively
47-
[main] TypeIndexInfoCollection.RealPrimaryIndexes property changed its return type to IReadOnlyList<IndexInfo>
39+
[main] TypeIndexInfoCollection.RealPrimaryIndexes property return type changed to IReadOnlyList<IndexInfo>
4840
[main] TypeIndexInfoCollection.GetIndexesContainingAllData() method changed its return type to IReadOnlyList<IndexInfo>
4941
[main] TypeInfo members that returned IList<T> changed return type to IReadOnlyList<TypeInfo>
5042
[main] PersistRequestBuilderContext.AffectedIndexes changed return type to IReadOnlyList<IndexInfo>
@@ -58,24 +50,26 @@
5850
[main] RemoveFieldHint.AffectedColumns changed return type to IReadOnlyList<string>
5951
[main] RemoveTypeHint.AffectedTables changed return type to IReadOnlyList<string>
6052
[main] SchemaComparisonResult.UnsafeActions changed return type to IReadOnlyList<NodeAction>
61-
[main] UpgradeContext.Hints changed return type to ISet<UpgradeHint>
6253
[main] UpgradeContext.Modules changed return type to IReadOnlyList<IModule>
6354
[main] UpgradeContext.OrderedUpgradeHandlers changed return type to IReadOnlyList<IUpgradeHandler>
6455
[main] UpgradeContext.UpgradeHandlers changed return type to IReadOnlyDictionary<Assembly, IUpgradeHandler>
65-
[main] UpgradeHandler.AddUpgradeHints() and .AddAutoHints() now take ISet<T> from .Net instead of ORM's ISet<T>
66-
[main] KeyMapping.Map changed type to IReadOnlyDictionary<Key, Key>
67-
[main] InterfaceMapping's properties of ReadOnlyList<T> type changed the type to IReadOnlyList<T>
56+
[main] KeyMapping.Map property changed type to .Net IReadOnlyDictionary<Key, Key>
57+
[main] InterfaceMapping's properties of ReadOnlyList<T> type changed the type to .Net IReadOnlyList<T>
6858
[main] Node's IncomingConnections and OutgoingConnections properties changed types to IReadOnlyList<NodeConnection<TNodeItem, TConnectionItem>>
6959
[main] CompositePreCompiler.Items became readonly field and changed its type to IReadOnlyList<IPreCompiler>
70-
[main] SqlCompilerConfiguration's SchemaMapping and DatabaseMapping changed return types to IReadOnlyDictionary<string, string>
71-
[main] TypeMappingRegistry.Mappings and .ReverseMappings changed return types to IReadOnlyDictionary<TKey, TValue>
60+
[main] SqlCompilerConfiguration's SchemaMapping and DatabaseMapping properties changed return types to IReadOnlyDictionary<string, string>
61+
[main] TypeMappingRegistry.Mappings and ReverseMappings properties changed return types to IReadOnlyDictionary<TKey, TValue>
7262
[main] Xtensive.Orm.Services.QueryTranslationResult became read-only structure
7363
[main] Query and ParameterBindings properties of Xtensive.Orm.Services.QueryTranslationResult changed their types and became read-only
74-
[main] SqlTranslator.BuildBatch method changed its parameter from string[] to IReadOnlyList<string>
64+
[main] SqlTranslator.BuildBatch() method changed its parameter from string[] to IReadOnlyList<string>
7565
[main] TypeReference, QueryRequest QueryParameterBinding types became read-only structures
7666
[main] TypeInfoRef, ColumnInfoRef, ColumnGroup and ComparisonRule types became read-only structures
7767
[main] RecordSetHeader constructors changed IEnumerable<T> paremters to IReadOnlyList<T>
7868
[main] ColumnGroupCollection no longer takes IEnumerable<T> as parameter of constructor
7969
[main] ColumnCollection no longer takes IEnumerable<T> as parameter of constructor, only constructor with IReadOnlyList<T> is available now
80-
[firebird] Add support for Firebird 4
70+
[main] Overall perfromance improved
71+
[main] Fixed issue when Execute/CreateDelayedQuery APIs query cache caused long-living objects
72+
[firebird] Added support for Firebird 4
8173
[sqlserver] Microsoft.Data.SqlClient is updated to verson 4.0.0
74+
[mysql] Added support for MySQL 5.7 and 8.0
75+
[mysql] Updated version of Google.Protobuf package

ChangeLog/7.1.0-Beta-2-dev.txt

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
[main] Obsolete CatalogHelper class has been removed
2+
[main] Obsolete ReacreateTableHint has been removed
3+
[main] Obsolete Session.SelectStorageNode() method is removed
4+
[main] Obsolete methods from ArrayExtensions, EnumerableExtensions and QueryableExtensions have been removed
5+
[main] Obsolete DeleteDataHint.PostCopy property has been removed
6+
[main] Obsolete QueryEndpoint's members have been removed
7+
[main] Obsolete Query's members have been removed
8+
[main] Obsolete members of DelayedScalarQuery<T> have been removed
9+
[main] Obsolete FieldInfo.IsDynalicallyDefined property's been removed (FieldInfo.IsDynamicallyDefined is still there)
10+
[main] Some EventArgs inheritors that were sealed classes transformed to read-only structures
11+
[main] DbCommandEventArgs became read-only structure
12+
[main] Xtensive.Sql.Dml.Extensions.IsNullReference() extension method is marked obsolete, use 'is null' operator instead
13+
[main] BitFaster.Caching package reference is updated to 1.0.7
14+
[main] No error caused by ambiguity due to new IQueryable extension methods of .Net 6
15+
[reprocessing] DomainBuildErrorEventArgs (not sealed) became read-only structure
16+
[reprocessing] ExecuteErrorEventArgs (not sealed) became read-only structure
17+
[tracking] TrackingCompletedEventArgs (sealed) became read-only structure
18+
[Web] Removed Obsolete SessionManager and StartupConfigurationExtension

Directory.Build.props

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -40,23 +40,25 @@
4040
<PropertyGroup>
4141
<NoLogo>true</NoLogo>
4242
<SuppressNETCoreSdkPreviewMessage>true</SuppressNETCoreSdkPreviewMessage>
43-
<TargetFramework>net5.0</TargetFramework>
43+
<TargetFrameworks>$(TargetFrameworks)</TargetFrameworks> <!-- the property -->
44+
<TargetFrameworks Condition="'$(TargetFrameworks)'==''">$(DO_TargetFrameworks)</TargetFrameworks> <!-- env var -->
45+
<TargetFrameworks Condition="'$(TargetFrameworks)'==''">net5.0</TargetFrameworks> <!-- fallback to default -->
4446
<LangVersion>9.0</LangVersion>
4547
<SolutionDir Condition="$(SolutionDir) == ''">$([MSBuild]::EnsureTrailingSlash(
4648
$([MSBuild]::GetDirectoryNameOfFileAbove('$(MSBuildThisFileDirectory)', 'Orm.sln'))))</SolutionDir>
4749
<Configuration Condition="$(Configuration) == ''">Debug</Configuration>
4850
<AllowedOutputExtensionsInPackageBuildOutputFolder>$(AllowedOutputExtensionsInPackageBuildOutputFolder);.pdb</AllowedOutputExtensionsInPackageBuildOutputFolder>
4951
<ArtifactsDir Condition="'$(ArtifactsDir)'==''">$(SolutionDir)_Build\</ArtifactsDir>
5052
<BaseIntermediateOutputPath>$(ArtifactsDir)obj\$(MSBuildProjectName)\</BaseIntermediateOutputPath>
51-
<IntermediateOutputPath>$(BaseIntermediateOutputPath)$(Configuration)\</IntermediateOutputPath>
53+
<IntermediateOutputPath>$(BaseIntermediateOutputPath)$(Configuration)\$(TargetFramework)\</IntermediateOutputPath>
5254
<BaseOutputPath>$(ArtifactsDir)bin\$(Configuration)\</BaseOutputPath>
5355
<BaseOutputPath Condition="$(MSBuildProjectName.Contains('Tests'))
5456
OR $(MSBuildProjectName) == 'TestCommon'
5557
OR $(MSBuildProjectName) == 'Xtensive.Orm.Manual'">$(ArtifactsDir)tests\$(Configuration)\</BaseOutputPath>
5658
<OutputPath>$(BaseOutputPath)lib\</OutputPath>
5759
<MSBuildProjectExtensionsPath>$(BaseIntermediateOutputPath)</MSBuildProjectExtensionsPath>
5860
<ProjectAssetsFile>$(MSBuildProjectExtensionsPath)project.assets.json</ProjectAssetsFile>
59-
<ProjectAssetsCacheFile>$(MSBuildProjectExtensionsPath)$(MSBuildProjectName).assets.cache</ProjectAssetsCacheFile>
61+
<ProjectAssetsCacheFile>$(MSBuildProjectExtensionsPath)$(TargetFramework)\$(MSBuildProjectName).assets.cache</ProjectAssetsCacheFile>
6062
<OrmKeyFile>$(SolutionDir)Orm\Orm.snk</OrmKeyFile>
6163
</PropertyGroup>
6264

Extensions/Xtensive.Orm.BulkOperations/BulkExtensions.cs

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -78,8 +78,14 @@ public static IUpdatable<T> Set<T, TResult>(this IUpdatable<T> query, Expression
7878
/// <returns>Instance of <see cref=" IUpdatable&lt;T&gt;"/>.</returns>
7979
[Pure]
8080
public static IUpdatable<T> Set<T, TResult>(this IQueryable<T> query, Expression<Func<T, TResult>> field,
81-
TResult value) where T: IEntity =>
82-
Set(query, field, a => value);
81+
TResult value) where T: IEntity
82+
{
83+
// Manually constructed expression is simpler than `a => value`
84+
var valueFunc = Expression.Lambda<Func<T, TResult>>(Expression.Constant(value, typeof(TResult)),
85+
Expression.Parameter(typeof(T), "a"));
86+
87+
return Set(query, field, valueFunc);
88+
}
8389

8490
/// <summary>
8591
/// Executes bulk update of entities specified by the query.

Extensions/Xtensive.Orm.BulkOperations/Internals/AddValueContext.cs

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
1-
using System.Linq.Expressions;
1+
using System.Linq.Expressions;
2+
using Xtensive.Linq;
23
using Xtensive.Orm.Model;
34
using Xtensive.Sql.Dml;
45

@@ -16,5 +17,10 @@ internal class AddValueContext
1617
public FieldInfo Field { get; set; }
1718

1819
public bool SubqueryExists { get; set; }
20+
21+
public object EvalLambdaBody() =>
22+
Lambda.Body is ConstantExpression ce
23+
? ce.Value
24+
: FastExpression.Lambda(Lambda.Body).Compile().DynamicInvoke();
1925
}
20-
}
26+
}

Extensions/Xtensive.Orm.BulkOperations/Internals/QueryOperation.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -142,14 +142,14 @@ private void JoinViaIn(SqlStatement statement, SqlSelect select)
142142
var s = (SqlSelect) select.Clone();
143143
foreach (var column in columns) {
144144
var ex = SqlDml.Equals(s.From.Columns[column.Name], table.Columns[column.Name]);
145-
s.Where = s.Where.IsNullReference() ? ex : SqlDml.And(s.Where, ex);
145+
s.Where = s.Where is null ? ex : SqlDml.And(s.Where, ex);
146146
}
147147
var existingColumns = s.Columns.ToChainedBuffer();
148148
s.Columns.Clear();
149149
var columnToAdd = existingColumns.First(c => c.Name.Equals(columnInfo.Name, StringComparison.Ordinal));
150150
s.Columns.Add(columnToAdd);
151151
var @in = SqlDml.In(SqlDml.TableColumn(table, columnInfo.Name), s);
152-
where = where.IsNullReference() ? @in : SqlDml.And(where, @in);
152+
where = where is null ? @in : SqlDml.And(where, @in);
153153
columns.Add(columnInfo);
154154
}
155155

Extensions/Xtensive.Orm.BulkOperations/Internals/SetOperation.cs

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -136,7 +136,7 @@ private void AddComputedExpression(AddValueContext addContext)
136136
var sqlSelect = request.Query;
137137
SqlExpression ex = sqlSelect.OrderBy[0].Expression;
138138
parent.Bindings.AddRange(request.ParameterBindings);
139-
139+
140140
if(parent.JoinedTableRef!=null)
141141
ex.AcceptVisitor(new ComputedExpressionSqlVisitor(sqlSelect.From, parent.JoinedTableRef));
142142

@@ -146,10 +146,11 @@ private void AddComputedExpression(AddValueContext addContext)
146146
private void AddConstantValue(AddValueContext addContext)
147147
{
148148
SqlTableColumn column = SqlDml.TableColumn(addContext.Statement.Table, addContext.Field.Column.Name);
149+
var constant = addContext.EvalLambdaBody();
149150
SqlExpression value;
150-
object constant = FastExpression.Lambda(addContext.Lambda.Body).Compile().DynamicInvoke();
151-
if (constant==null)
151+
if (constant == null) {
152152
value = SqlDml.Null;
153+
}
153154
else {
154155
QueryParameterBinding binding = parent.QueryBuilder.CreateParameterBinding(constant.GetType(), context => constant);
155156
parent.Bindings.Add(binding);
@@ -223,7 +224,8 @@ private void AddEntityValue(AddValueContext addContext)
223224
}
224225
}
225226
i = -1;
226-
var entity = (IEntity) FastExpression.Lambda(addContext.Lambda.Body).Compile().DynamicInvoke();
227+
var entity = (IEntity)addContext.EvalLambdaBody();
228+
227229
foreach (ColumnInfo column in addContext.Field.Columns) {
228230
i++;
229231
SqlExpression value;

Extensions/Xtensive.Orm.Logging.NLog/Log.cs

Lines changed: 18 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
// Copyright (C) 2013-2020 Xtensive LLC.
1+
// Copyright (C) 2013-2022 Xtensive LLC.
22
// This code is distributed under MIT license terms.
33
// See the License.txt file in the project root for more information.
44
// Created by: Dmitri Maximov
@@ -17,37 +17,37 @@ public class Log : BaseLog
1717
{
1818
private readonly Logger target;
1919

20-
private static NLogLevel ConvertLevel(LogLevel level)
21-
{
22-
switch (level) {
23-
case LogLevel.Debug:
24-
return NLogLevel.Debug;
25-
case LogLevel.Error:
26-
return NLogLevel.Error;
27-
case LogLevel.FatalError:
28-
return NLogLevel.Fatal;
29-
case LogLevel.Warning:
30-
return NLogLevel.Warn;
31-
default:
32-
return NLogLevel.Info;
33-
}
34-
}
35-
3620
/// <inheritdoc/>
3721
public override bool IsLogged(LogLevel level)
3822
{
3923
return target.IsEnabled(ConvertLevel(level));
4024
}
4125

4226
/// <inheritdoc/>
43-
public override void Write(LogEventInfo info)
27+
public override void Write(in LogEventInfo info)
4428
{
4529
if (info.Exception!=null)
4630
target.Log(ConvertLevel(info.Level), info.Exception, info.FormattedMessage);
4731
else
4832
target.Log(ConvertLevel(info.Level), info.FormattedMessage);
4933
}
5034

35+
private static NLogLevel ConvertLevel(in LogLevel level)
36+
{
37+
switch (level) {
38+
case LogLevel.Debug:
39+
return NLogLevel.Debug;
40+
case LogLevel.Error:
41+
return NLogLevel.Error;
42+
case LogLevel.FatalError:
43+
return NLogLevel.Fatal;
44+
case LogLevel.Warning:
45+
return NLogLevel.Warn;
46+
default:
47+
return NLogLevel.Info;
48+
}
49+
}
50+
5151
/// <summary>
5252
/// Creates instance of <see cref="Log"/> class.
5353
/// </summary>
Lines changed: 22 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
// Copyright (C) 2014-2020 Xtensive LLC.
1+
// Copyright (C) 2014-2022 Xtensive LLC.
22
// This code is distributed under MIT license terms.
33
// See the License.txt file in the project root for more information.
44
// Created by: Alexey Kulakov
@@ -16,25 +16,7 @@ namespace Xtensive.Orm.Logging.log4net
1616
/// </summary>
1717
public class Log : BaseLog
1818
{
19-
private log4netLog target;
20-
21-
private Level ConvertLevel(LogLevel level)
22-
{
23-
switch (level) {
24-
case LogLevel.Debug:
25-
return Level.Debug;
26-
case LogLevel.Info:
27-
return Level.Info;
28-
case LogLevel.Warning:
29-
return Level.Warn;
30-
case LogLevel.Error:
31-
return Level.Error;
32-
case LogLevel.FatalError:
33-
return Level.Fatal;
34-
default:
35-
return Level.Info;
36-
}
37-
}
19+
private readonly log4netLog target;
3820

3921
/// <inheritdoc />
4022
public override bool IsLogged(LogLevel level)
@@ -43,11 +25,29 @@ public override bool IsLogged(LogLevel level)
4325
}
4426

4527
/// <inheritdoc />
46-
public override void Write(LogEventInfo info)
28+
public override void Write(in LogEventInfo info)
4729
{
4830
target.Logger.Log(target.Logger.GetType(), ConvertLevel(info.Level), info.FormattedMessage, info.Exception);
4931
}
5032

33+
private Level ConvertLevel(in LogLevel level)
34+
{
35+
switch (level) {
36+
case LogLevel.Debug:
37+
return Level.Debug;
38+
case LogLevel.Info:
39+
return Level.Info;
40+
case LogLevel.Warning:
41+
return Level.Warn;
42+
case LogLevel.Error:
43+
return Level.Error;
44+
case LogLevel.FatalError:
45+
return Level.Fatal;
46+
default:
47+
return Level.Info;
48+
}
49+
}
50+
5151
/// <summary>
5252
/// Creates instance of <see cref="Log"/> class.
5353
/// </summary>
@@ -57,6 +57,7 @@ public override void Write(LogEventInfo info)
5757
public Log(Assembly repositoryAssembly, string name)
5858
{
5959
target = log4netLogManager.GetLogger(repositoryAssembly, name);
60+
6061
}
6162
}
6263
}

0 commit comments

Comments
 (0)