-
Notifications
You must be signed in to change notification settings - Fork 12
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Нежадная загрузка мастеров при обновлении объекта #293
base: develop
Are you sure you want to change the base?
Changes from 16 commits
3197b6a
d7ed4e8
981f7c3
c3ff6f2
a5befc6
1f6e344
650aaae
c99efbf
16999ff
626e920
f024898
dbe2e01
845394a
361badc
9abb808
31d0ded
21ac6cc
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Large diffs are not rendered by default.
Anisimova2020 marked this conversation as resolved.
Show resolved
Hide resolved
|
Original file line number | Diff line number | Diff line change | ||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
@@ -74,6 +74,16 @@ public class DefaultDataObjectEdmModelBuilder : IDataObjectEdmModelBuilder | |||||||||||||||||||||||||||||||||||||
/// </summary> | ||||||||||||||||||||||||||||||||||||||
private Dictionary<Type, View> UpdateViews { get; set; } | ||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||
/// <summary> | ||||||||||||||||||||||||||||||||||||||
/// Types for which masters should be light-loaded on updates (load only __PrimaryKey). | ||||||||||||||||||||||||||||||||||||||
/// </summary> | ||||||||||||||||||||||||||||||||||||||
private IEnumerable<Type> MasterLightLoadTypes { get; set; } | ||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||
/// <summary> | ||||||||||||||||||||||||||||||||||||||
/// Whether to load all masters in light-loaded mode on updates (load only __PrimaryKey). | ||||||||||||||||||||||||||||||||||||||
/// </summary> | ||||||||||||||||||||||||||||||||||||||
private bool MasterLightLoadAllTypes { get; set; } | ||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||
private readonly PropertyInfo _keyProperty = Information.ExtractPropertyInfo<DataObject>(n => n.__PrimaryKey); | ||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||
/// <summary> | ||||||||||||||||||||||||||||||||||||||
|
@@ -88,7 +98,9 @@ public DefaultDataObjectEdmModelBuilder( | |||||||||||||||||||||||||||||||||||||
bool useNamespaceInEntitySetName = true, | ||||||||||||||||||||||||||||||||||||||
PseudoDetailDefinitions pseudoDetailDefinitions = null, | ||||||||||||||||||||||||||||||||||||||
Dictionary<Type, IEdmPrimitiveType> additionalMapping = null, | ||||||||||||||||||||||||||||||||||||||
IEnumerable<KeyValuePair<Type, View>> updateViews = null) | ||||||||||||||||||||||||||||||||||||||
IEnumerable<KeyValuePair<Type, View>> updateViews = null, | ||||||||||||||||||||||||||||||||||||||
IEnumerable<Type> masterLightLoadTypes = null, | ||||||||||||||||||||||||||||||||||||||
bool masterLightLoadAllTypes = false) | ||||||||||||||||||||||||||||||||||||||
Comment on lines
+101
to
+103
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 🛠️ Refactor suggestion Consider refactoring constructor parameters for better maintainability The constructor now has several optional parameters, which can make it unwieldy and harder to maintain. Consider refactoring by introducing a configuration object or applying the builder pattern to encapsulate these parameters for improved readability and extensibility. |
||||||||||||||||||||||||||||||||||||||
{ | ||||||||||||||||||||||||||||||||||||||
_searchAssemblies = searchAssemblies ?? throw new ArgumentNullException(nameof(searchAssemblies), "Contract assertion not met: searchAssemblies != null"); | ||||||||||||||||||||||||||||||||||||||
_useNamespaceInEntitySetName = useNamespaceInEntitySetName; | ||||||||||||||||||||||||||||||||||||||
|
@@ -105,6 +117,18 @@ public DefaultDataObjectEdmModelBuilder( | |||||||||||||||||||||||||||||||||||||
{ | ||||||||||||||||||||||||||||||||||||||
SetUpdateView(updateViews); | ||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||
if (masterLightLoadTypes != null) | ||||||||||||||||||||||||||||||||||||||
{ | ||||||||||||||||||||||||||||||||||||||
SetMasterLightLoadTypes(masterLightLoadTypes); | ||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||
if (masterLightLoadAllTypes) | ||||||||||||||||||||||||||||||||||||||
{ | ||||||||||||||||||||||||||||||||||||||
throw new ArgumentException("Parameters masterLightLoadAllTypes and masterLightLoadTypes can not be used together in DefaultDataObjectEdmModelBuilder."); | ||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||
Comment on lines
+125
to
+128
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Correct the grammar in the exception message The exception message in the Apply this diff to fix the exception message: -throw new ArgumentException("Parameters masterLightLoadAllTypes and masterLightLoadTypes can not be used together in DefaultDataObjectEdmModelBuilder.");
+throw new ArgumentException("Parameters masterLightLoadAllTypes and masterLightLoadTypes cannot be used together in DefaultDataObjectEdmModelBuilder."); 📝 Committable suggestion
Suggested change
|
||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||
this.MasterLightLoadAllTypes = masterLightLoadAllTypes; | ||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||
/// <summary> | ||||||||||||||||||||||||||||||||||||||
|
@@ -215,7 +239,12 @@ private void SetUpdateView(Type dataObjectType, View updateView) | |||||||||||||||||||||||||||||||||||||
{ | ||||||||||||||||||||||||||||||||||||||
if (!dataObjectType.IsSubclassOf(typeof(DataObject))) | ||||||||||||||||||||||||||||||||||||||
turbcool marked this conversation as resolved.
Show resolved
Hide resolved
|
||||||||||||||||||||||||||||||||||||||
{ | ||||||||||||||||||||||||||||||||||||||
throw new ArgumentException("Update view can be set only for a DataObject.", nameof(dataObjectType)); | ||||||||||||||||||||||||||||||||||||||
throw new ArgumentException($"Update view can be set only for a DataObject. Current type is {dataObjectType}", nameof(dataObjectType)); | ||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||
if (dataObjectType is null) | ||||||||||||||||||||||||||||||||||||||
{ | ||||||||||||||||||||||||||||||||||||||
throw new ArgumentException("dataObjectType can not be null.", nameof(dataObjectType)); | ||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||
if (updateView is null) | ||||||||||||||||||||||||||||||||||||||
|
@@ -232,6 +261,26 @@ private void SetUpdateView(Type dataObjectType, View updateView) | |||||||||||||||||||||||||||||||||||||
UpdateViews[dataObjectType] = updateView; | ||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||
/// <summary> | ||||||||||||||||||||||||||||||||||||||
/// Sets DataObject types for which masters will be light-loaded on updates (load only __PrimaryKey). | ||||||||||||||||||||||||||||||||||||||
/// </summary> | ||||||||||||||||||||||||||||||||||||||
/// <param name="masterLightLoadTypes">Types for which masters should be light-loaded.</param> | ||||||||||||||||||||||||||||||||||||||
private void SetMasterLightLoadTypes(IEnumerable<Type> masterLightLoadTypes) | ||||||||||||||||||||||||||||||||||||||
{ | ||||||||||||||||||||||||||||||||||||||
if (masterLightLoadTypes != null) | ||||||||||||||||||||||||||||||||||||||
{ | ||||||||||||||||||||||||||||||||||||||
foreach (Type type in masterLightLoadTypes) | ||||||||||||||||||||||||||||||||||||||
turbcool marked this conversation as resolved.
Show resolved
Hide resolved
|
||||||||||||||||||||||||||||||||||||||
{ | ||||||||||||||||||||||||||||||||||||||
if (!type.IsSubclassOf(typeof(DataObject))) | ||||||||||||||||||||||||||||||||||||||
{ | ||||||||||||||||||||||||||||||||||||||
throw new ArgumentException("MasterLightLoad option can be set only for a DataObject.", nameof(masterLightLoadTypes)); | ||||||||||||||||||||||||||||||||||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Improve clarity of the exception message The exception message can be rephrased for better clarity: "The MasterLightLoad option can only be set for types that inherit from DataObject." Apply this diff to enhance the message: -throw new ArgumentException("MasterLightLoad option can be set only for a DataObject.", nameof(masterLightLoadTypes));
+throw new ArgumentException("MasterLightLoad option can only be set for types inheriting from DataObject.", nameof(masterLightLoadTypes)); 📝 Committable suggestion
Suggested change
|
||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||
Comment on lines
+272
to
+278
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Add null check for elements in masterLightLoadTypes There is no check for null elements within the Apply this diff to include the null check: foreach (Type type in masterLightLoadTypes)
{
+ if (type is null)
+ {
+ throw new ArgumentException("Type in masterLightLoadTypes cannot be null.", nameof(masterLightLoadTypes));
+ }
if (!type.IsSubclassOf(typeof(DataObject)))
{
throw new ArgumentException("MasterLightLoad option can only be set for types inheriting from DataObject.", nameof(masterLightLoadTypes));
}
} 📝 Committable suggestion
Suggested change
|
||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||
MasterLightLoadTypes = masterLightLoadTypes; | ||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||
/// <summary> | ||||||||||||||||||||||||||||||||||||||
/// Adds the property for exposing. | ||||||||||||||||||||||||||||||||||||||
/// </summary> | ||||||||||||||||||||||||||||||||||||||
|
@@ -310,6 +359,7 @@ private void AddDataObjectWithHierarchy(DataObjectEdmMetadata meta, Type dataObj | |||||||||||||||||||||||||||||||||||||
CollectionName = EntitySetNameBuilder(dataObjectType), | ||||||||||||||||||||||||||||||||||||||
DefaultView = DynamicView.Create(dataObjectType, null).View, | ||||||||||||||||||||||||||||||||||||||
UpdateView = updateView, | ||||||||||||||||||||||||||||||||||||||
MasterLightLoad = MasterLightLoadAllTypes || (MasterLightLoadTypes?.Contains(dataObjectType) ?? false), | ||||||||||||||||||||||||||||||||||||||
}; | ||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||
AddProperties(dataObjectType, typeSettings); | ||||||||||||||||||||||||||||||||||||||
|
@@ -458,4 +508,4 @@ private string BuildEntityPropertyName(PropertyInfo propertyDataObject) | |||||||||||||||||||||||||||||||||||||
return propertyDataObject.Name; | ||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Fix grammatical issue in the parameter description.
The phrase "allow to change" is grammatically incorrect. Consider rewording:
📝 Committable suggestion
🧰 Tools
🪛 LanguageTool