Closed muratcakir closed 2 years ago
Web API:
Performance best-practices
async/await
all the way!HttpClientFactory
to obtain HttpClient
instancesEF.CompileQuery
where applicableReadFormAsync
over Request.Form
DbContext.OpenConnection[Async]()
or DbContextScope(retainConnection: true)
Terminology changes
Old | New |
---|---|
Plugin | Module |
Type/member name changes
Old | New |
---|---|
HostingEnvironment.IsHosted | CommonHelper.IsHosted |
CommonHelper.GetAppSetting | Removed. Use strongly typed IApplicationContext.AppConfiguration instead |
CommonHelper.HasConnectionString | Removed |
FileSystemHelper | Removed. Use IFileSystem extensions instead. |
DataSettings.Current | DataSettings.Instance |
LocalizedString.(Js)Text | LocalizedString.(Js)Value |
HttpRequestBase.IsHttps() | HttpRequest.IsSecureConnection() |
IDbContext.DetachAll() | DbContext.ChangeTracker.Clear() |
IDbContext.Attach() | DbContext.Set |
IDbContext.QueryForCollection() | EntityEntry.Collection(...).Query() |
IDbContext.QueryForReference() | EntityEntry.Reference(...).Query() |
IQueryable |
IQueryable |
IStoreMappingSupported | IStoreRestricted |
IStoreService | Removed. Use IStoreContext instead |
Querystring | MutableQueryCollection |
KeyedLock | AsyncLock |
LocalizationHelper | CultureHelper |
ISettingService.LoadSetting() | ISettingFactory.LoadSettings() (Singleton) |
ISettingService.SaveSetting() | ISettingFactory.SaveSettings() (Singleton) |
ISettingService.SetSetting() | ISettingService.ApplySettingAsync() |
ISettingService.DeleteSetting() | ISettingService.RemoveSettingAsync() |
ILocalizedEntityService.Save*() | ILocalizedEntityService.Apply*() |
ILocalizationService.Import*() | IXmlResourceManager.*() |
ILocalizationService.Export*() | IXmlResourceManager.*() |
ICustomerActivityService.InsertActivity() | IActivityLogger.LogActivity() |
decimal.RoundToNearest() | Currency.RoundToNearest() |
decimal.RoundIfEnabledFor() | Currency.RoundIfEnabledFor() |
string.IsCaseInsensitiveEqual() | string.EqualsNoCase() |
string.IsCaseSensitiveEqual() | Removed |
BasePlugin.AddOrUpdatePluginLocaleResource() | Removed |
BasePlugin.DeletePluginLocaleResource() | ILocalizationService.DeleteLocaleStringResourcesAsync() |
PluginDescriptor.GetLocalizedValue() | LocalizedEntityHelper.GetLocalizedModuleProperty() |
IUrlRecordService | IUrlService |
SeoExtensions.ValidateSeName() | IUrlService.ValidateSlugAsync(). extraSlugLookup param removed. Now tracked internally. |
SeoExtensions.GetSeName(string, [SeoSettings]) | SeoHelper.GetSeName(*) |
SeoExtensions.GetSeName(this...) | SeoExtensions.GetActiveSlug() or SeoExtensions.BuildSlug() |
LocalizedEntityHelper.GetSeName() | LocalizedEntityHelper.GetActiveSlug() |
IUrlRecordService.SaveSlug |
Removed. Use ApplySlugAsync() |
IGenericAttributeService.GetAttributesForEntity(int[], string) | Removed. Use IGenericAttributeService.PrefetchAttributesAsync(), then MyEntity.GenericAttributes. |
IGenericAttributeService.GetAttribute(), ...SaveAttribute() | Removed. Use MyEntity.GenericAttributes.Get() or ...Set(), or use property getter/setter of covariant attribute collection types. |
Architecture
task scheduler: https://github.com/quartznet/quartznet
task scheduler: https://github.com/quartznet/quartznet
Absolutely no! We gonna keep our self-made web scheduler that solves all dependency scoping and mem leak issues we had before.
Any updates?
Any updates?
The new Smartstore Core repository is private at this moment, we will make it public next week hopefully.
Is there an ETA for the migration to ASP.NET Core?
The Beta will be released within the next few weeks.
release ist done ... can this be closed now?
Parts/modules that require a complete rewrite:
Plugin BootstrapperTheming engine (most parts)Custom Razor stuffBundling & Minification & SASS compiler (BundleTransformer > Custom bundler)Autofac: InstancePerRequest > InstancePerLifetimeScopeTelerik UI componentsGridNumeric inputsNo domain proxies anymore (thanks god).ILazyLoader
instead.Remove all[Serializable]
attributes.Remove all[DataContract]
and[DataMember]
attributes on domain entities. Use[JsonIgnore]
for exclusions.Datepicker UI componentSmartstore UI components (> TagHelpers)DB Hooking Framework (partially)SEO / multilang MVC routingMedia file middlewareAuthentication > ASP.NET Identity (?)PDF engine (> Custom wkhtmltopdf wrapper)Newtonsoft.Json > System.Text.Json (?)E-Mail senderImageProcessor > ImageSharplog4net > NLog | SeriLogMemory cacheWebHelperQueryString > wrapIQueryCollection
EF 2nd level cache (https://github.com/VahidN/EFCoreSecondLevelCacheInterceptor)EF 2nd level request cache: policy based.Implement EF BatchDelete and BatchUpdateIO/Disk stuffIFileSystem > IFileProvider (?)All VirtualPathProvidersReplace Inflector, Prettifiers etc. with Humanizer libraryMimeTypes > FileExtensionContentTypeProvider (for static files)Blog/News/Forum/Polls > make modulesSettingService: Cache scopes must be created from caller (noclearCache
params anymore)Host shutdown > IHostApplicationLifetime.ApplicationStopping[DllImport]
annotationsNoNameValueCollection
anymore. Refactor BuildQueryString() callers accordingly.Language resource names with type names in it (e.g. Enums) must be changed.