NHibernate Validator throws System.NotSupportedException after upgrading to 3.1 - nhibernate

Has anyone encountered this?
After upgrading to NHibernate 3.1, I am receiving the following exception from NHibernate Validator when running NUnit test cases:
System.NotSupportedException : The invoked member is not supported in
a dynamic assembly. at
System.Reflection.Emit.InternalAssemblyBuilder.GetManifestResourceStream(String
name) at
NHibernate.Validator.Cfg.XmlMappingLoader.AddResource(Assembly
assembly, String resource) at
NHibernate.Validator.Cfg.XmlMappingLoader.GetXmlMappingFor(Type type)
at
NHibernate.Validator.Engine.JITClassMappingFactory.GetExternalDefinitionFor(Type
type) at
NHibernate.Validator.Engine.JITClassMappingFactory.GetClassMapping(Type
clazz, ValidatorMode mode) at
NHibernate.Validator.Engine.ClassValidator.InitValidator(Type clazz,
IDictionary`2 nestedClassValidators) at
NHibernate.Validator.Engine.ClassValidator..ctor(Type clazz,
IConstraintValidatorFactory constraintValidatorFactory, IDictionary`2
childClassValidators, IClassValidatorFactory factory) at
NHibernate.Validator.Engine.StateFullClassValidatorFactory.GetRootValidator(Type
type) at
NHibernate.Validator.Engine.ValidatorEngine.GetClassValidator(Type
entityType) at
NHibernate.Validator.Engine.ValidatorEngine.GetElementOrNew(Type
entityType) at
NHibernate.Validator.Engine.ValidatorEngine.InternalValidate(Object
entity, Object[] activeTags) at
NHibernate.Validator.Engine.ValidatorEngine.Validate(Object entity,
Object[] activeTags) at
NHibernate.Validator.Event.ValidateEventListener.Validate(Object
entity, EntityMode mode) at
NHibernate.Validator.Event.ValidatePreUpdateEventListener.OnPreUpdate(PreUpdateEvent
event) at NHibernate.Action.EntityUpdateAction.PreUpdate() in
d:\CSharp\NH\NH\nhibernate\src\NHibernate\Action\EntityUpdateAction.cs:
line 200 at NHibernate.Action.EntityUpdateAction.Execute() in
d:\CSharp\NH\NH\nhibernate\src\NHibernate\Action\EntityUpdateAction.cs:
line 58 at NHibernate.Engine.ActionQueue.Execute(IExecutable
executable) in
d:\CSharp\NH\NH\nhibernate\src\NHibernate\Engine\ActionQueue.cs: line
136 at NHibernate.Engine.ActionQueue.ExecuteActions(IList list) in
d:\CSharp\NH\NH\nhibernate\src\NHibernate\Engine\ActionQueue.cs: line
126 at NHibernate.Engine.ActionQueue.ExecuteActions() in
d:\CSharp\NH\NH\nhibernate\src\NHibernate\Engine\ActionQueue.cs: line
170 at
NHibernate.Event.Default.AbstractFlushingEventListener.PerformExecutions(IEventSource
session) in
d:\CSharp\NH\NH\nhibernate\src\NHibernate\Event\Default\AbstractFlushingEventListener.cs:
line 241 at
NHibernate.Event.Default.DefaultFlushEventListener.OnFlush(FlushEvent
event) in
d:\CSharp\NH\NH\nhibernate\src\NHibernate\Event\Default\DefaultFlushEventListener.cs:
line 19 at NHibernate.Impl.SessionImpl.Flush() in
d:\CSharp\NH\NH\nhibernate\src\NHibernate\Impl\SessionImpl.cs: line
1472 at TestDataAccess.FooTest.TestFoo() in FooTest.cs
As you can see from the stack trace, the error occurs when the session is flushed and NHibernate Validator does its thing.
Update I have tried stepping through the NH Validator code and it appears that at some point it is trying to validate the Castle proxy of an entity, rather than the underlying entity itself. This then causes the trouble. No idea what to do about this...
Update The problem goes away if I use the LinFu ProxyFactoryFactory, rather than Castle. Unfortunately, LinFu is giving me other problems so I don't want to use it.

NHibernate 3.2 removed the need for external proxy libraries.
They are still supported, but they are not distributed anymore, and the default is to use an internal implementation.
Have you tried upgrading?
Update: in order to compile NHibernate Validator for NH 3.2, you need to modify NHibernateHelper as follows:
public static bool IsProxyFactoryConfigurated()
{
var f = NHibernate.Cfg.Environment.BytecodeProvider.ProxyFactoryFactory;
return f != null;
}
For details, read NHV-116

Related

Json Errors in raven 3.5 client

Periodically we receive the following error when saving to a Raven Database. The client and database are v3.5. The solution thus far has been to restart the servers and after that things appear to settle down. The user can go to a different server and can go back into the site and retrieved what was saved. However when we see 1 error like this on a server the server starts to report 100's of them. We cannot reproduce this in QA. So I am leaning towards load or our Raven Sessions are not being closed properly.
Calling the Raven OpenSessionAsync() as the point of creating the class
IAsyncDocumentSession
public async Task<bool> SaveChangesAsync()
{
using (_session)
{
await _session.SaveChangesAsync();
}
return true;
}
This is the area in our code that starts the error when saving should we also be doing something more?
Message: Token PropertyName in state Property would result in an invalid JSON object. Path ''.
Raven.Imports.Newtonsoft.Json.JsonWriter.AutoComplete(JsonToken tokenBeingWritten) in C:\Builds\RavenDB-Stable-3.5\Imports\Newtonsoft.Json\Src\Newtonsoft.Json\JsonWriter.cs:779
Raven.Json.Linq.RavenJTokenWriter.WritePropertyName(String name) in C:\Builds\RavenDB-Stable-3.5\Raven.Abstractions\Json\Linq\RavenJTokenWriter.cs:51
Raven.Imports.Newtonsoft.Json.Serialization.JsonSerializerInternalWriter.SerializeObject(JsonWriter writer, Object value, JsonObjectContract contract, JsonProperty member, JsonContainerContract collectionContract, JsonProperty containerProperty) in C:\Builds\RavenDB-Stable-3.5\Imports\Newtonsoft.Json\Src\Newtonsoft.Json\Serialization\JsonSerializerInternalWriter.cs:428
Raven.Imports.Newtonsoft.Json.Serialization.JsonSerializerInternalWriter.Serialize(JsonWriter jsonWriter, Object value, Type objectType) in C:\Builds\RavenDB-Stable-3.5\Imports\Newtonsoft.Json\Src\Newtonsoft.Json\Serialization\JsonSerializerInternalWriter.cs:101
Raven.Imports.Newtonsoft.Json.JsonSerializer.SerializeInternal(JsonWriter jsonWriter, Object value, Type objectType) in C:\Builds\RavenDB-Stable-3.5\Imports\Newtonsoft.Json\Src\Newtonsoft.Json\JsonSerializer.cs:949
Raven.Json.Linq.RavenJToken.FromObjectInternal(Object o, JsonSerializer jsonSerializer) in C:\Builds\RavenDB-Stable-3.5\Raven.Abstractions\Json\Linq\RavenJToken.cs:91
Raven.Json.Linq.RavenJObject.FromObject(Object o, JsonSerializer jsonSerializer) in C:\Builds\RavenDB-Stable-3.5\Raven.Abstractions\Json\Linq\RavenJObject.cs:174
Raven.Client.Document.EntityToJson.GetObjectAsJson(Object entity) in C:\Builds\RavenDB-Stable-3.5\Raven.Client.Lightweight\Document\EntityToJson.cs:72
Raven.Client.Document.EntityToJson.ConvertEntityToJson(String key, Object entity, RavenJObject metadata) in C:\Builds\RavenDB-Stable-3.5\Raven.Client.Lightweight\Document\EntityToJson.cs:44
Raven.Client.Document.InMemoryDocumentSessionOperations.EntityChanged(Object entity, DocumentMetadata documentMetadata, IDictionary2 changes) in C:\Builds\RavenDB-Stable-3.5\Raven.Client.Lightweight\Document\InMemoryDocumentSessionOperations.cs:1218
Raven.Client.Document.InMemoryDocumentSessionOperations.<PrepareForEntitiesPuts>b__110_0(KeyValuePair2 pair) in C:\Builds\RavenDB-Stable-3.5\Raven.Client.Lightweight\Document\InMemoryDocumentSessionOperations.cs:1025
System.Linq.Enumerable+WhereEnumerableIterator1.MoveNext():55
System.Linq.Buffer1..ctor(IEnumerable1 source):114
System.Linq.Enumerable.ToArray[TSource](IEnumerable1 source):20
Raven.Client.Document.InMemoryDocumentSessionOperations.PrepareForEntitiesPuts(SaveChangesData result) in C:\Builds\RavenDB-Stable-3.5\Raven.Client.Lightweight\Document\InMemoryDocumentSessionOperations.cs:1025
Raven.Client.Document.InMemoryDocumentSessionOperations.PrepareForSaveChanges() in C:\Builds\RavenDB-Stable-3.5\Raven.Client.Lightweight\Document\InMemoryDocumentSessionOperations.cs:986
Raven.Client.Document.Async.AsyncDocumentSession+d__73.MoveNext() in C:\Builds\RavenDB-Stable-3.5\Raven.Client.Lightweight\Document\Async\AsyncDocumentSession.cs:928
System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw():12
System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task):46
ApplicantCenter.Services.ApplicationService+d__9.MoveNext() in d:\a\1\s\Project\Services\ApplicationService_Helpers.cs:207
System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw():12
System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task):46
ApplicantCenter.Controllers.ApplicationController+d__10.MoveNext() in d:\a\1\s\Project\Controllers\ApplicationController.cs:117
System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw():12
System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task):46
System.Web.Mvc.Async.TaskAsyncActionDescriptor.EndExecute(IAsyncResult asyncResult)
System.Web.Mvc.Async.AsyncControllerActionInvoker+<>c__DisplayClass8_0.b__1(IAsyncResult asyncResult)
System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeActionMethod(IAsyncResult asyncResult)
System.Web.Mvc.Async.AsyncControllerActionInvoker+AsyncInvocationWithFilters.b__11_0():19
System.Web.Mvc.Async.AsyncControllerActionInvoker+AsyncInvocationWithFilters+<>c__DisplayClass11_1.b__2():134
System.Web.Mvc.Async.AsyncControllerActionInvoker+AsyncInvocationWithFilters+<>c__DisplayClass11_1.b__2():134
System.Web.Mvc.Async.AsyncControllerActionInvoker+AsyncInvocationWithFilters+<>c__DisplayClass11_1.b__2():134
System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeActionMethodWithFilters(IAsyncResult asyncResult)
System.Web.Mvc.Async.AsyncControllerActionInvoker+<>c__DisplayClass3_6.b__3()
System.Web.Mvc.Async.AsyncControllerActionInvoker+<>c__DisplayClass3_1.b__5(IAsyncResult asyncResult)
The problem here is that you are disposing the session that maybe used by others.
You put a global _session inside an using block, the _session resources will be disposed after the using block end, and other parts of code that are using the same global _session will become invalid.

Windows 10 SDK 1.3 visual designer hangs and throws error

I updated VS 2015 to Update 2 along with the 1.3 SDK, now when I open a xaml file the designer seems to be working hard and hanging all of VS. When closing shows there was an exception, checking the log it shows this:
Any workaround yet?
<entry>
<record>919</record>
<time>2016/04/05 16:54:19.061</time>
<type>Error</type>
<source>Editor or Editor Extension</source>
<description>System.NullReferenceException: Object reference not set to an instance of an object.
at Microsoft.VisualStudio.DesignTools.DesignerHost.HostServices.HostProject.get_CodeDocumentTypeIdentifier()
at Microsoft.VisualStudio.DesignTools.HostUtility.Extensions.HostExtensions.IsCPlusPlusProject(IHostProject project)
at Microsoft.VisualStudio.DesignTools.Xaml.LanguageService.Metadata.ManagedTypeResolverService.GetTypeResolver(IHostProject hostProject)
at Microsoft.VisualStudio.DesignTools.Xaml.LanguageService.XamlFileInformationService.CreateFileInformationContext(IHostSourceItem sourceItem)
at Microsoft.VisualStudio.DesignTools.Xaml.LanguageService.XamlLanguageService.GetFileContextScope(String fileName, IVsTextLines textLines, IXamlFileInformationContext& fileContext)
at Microsoft.VisualStudio.DesignTools.Xaml.LanguageService.XamlLanguageService.EnsureBufferCache(IVsTextLines textLines)
at Microsoft.VisualStudio.DesignTools.Xaml.LanguageService.XamlLanguageService.EnsureBufferCache(IVsTextView view)
at Microsoft.VisualStudio.DesignTools.Xaml.LanguageService.XamlSource.BeginParse(Int32 line, Int32 idx, TokenInfo info, ParseReason reason, IVsTextView view, ParseResultHandler callback)
at Microsoft.VisualStudio.Package.ViewFilter.GetDataTipText(TextSpan[] aspan, String& textValue)
at Microsoft.VisualStudio.Editor.Implementation.ShimQuickInfoSource.TryGetQuickInfoFromFilter(IQuickInfoSession session, TextSpan[] dataBufferTextSpan, String& tipText)
at Microsoft.VisualStudio.Editor.Implementation.ShimQuickInfoSource.AugmentQuickInfoSession(IQuickInfoSession session, IList`1 qiContent, ITrackingSpan& applicableToSpan)
at Microsoft.VisualStudio.Language.Intellisense.Implementation.QuickInfoSession.Recalculate()
at Microsoft.VisualStudio.Language.Intellisense.Implementation.QuickInfoSession.Start()
at Microsoft.VisualStudio.Language.Intellisense.Implementation.DefaultQuickInfoController.OnTextView_MouseHover(Object sender, MouseHoverEventArgs e)
at Microsoft.VisualStudio.Text.Editor.Implementation.WpfTextView.RaiseHoverEvents()</description>
This one shows too:
<entry>
<record>917</record>
<time>2016/04/05 16:52:01.816</time>
<type>Error</type>
<source>XAML Designer</source>
<description>XAML Designer Exception
Type: System.ArgumentNullException
Message: Value cannot be null.
Parameter name: source
Stack:
at System.Linq.Enumerable.SelectMany[TSource,TResult](IEnumerable`1 source, Func`2 selector)
at Microsoft.VisualStudio.DesignTools.HostUtility.AppPackage.WindowsXamlManifestUtility.GenerateExtensionsXml(IHostProject project, ManifestSchema schema)
at Microsoft.VisualStudio.DesignTools.HostUtility.AppPackage.WindowsXamlManifestUtility.<>c__DisplayClass33_0.<GenerateManifestContents>b__0()
at Microsoft.VisualStudio.DesignTools.DesignerContract.Isolation.Remoting.ThreadMarshaler.<>c__DisplayClass48_0`1.<MarshalIn>b__0()
at Microsoft.VisualStudio.DesignTools.DesignerContract.Isolation.Remoting.STAMarshaler.Call.InvokeWorker()
at Microsoft.VisualStudio.DesignTools.DesignerContract.Isolation.Remoting.STAMarshaler.Call.Invoke(Boolean waitingInExternalCall)
at Microsoft.VisualStudio.DesignTools.DesignerContract.Isolation.Remoting.STAMarshaler.InvokeCall(Call call)
at Microsoft.VisualStudio.DesignTools.DesignerContract.Isolation.Remoting.STAMarshaler.DirectInvoke(Boolean inbound, Action action, Int32 sourceApartmentId, Int32 targetApartmentId, Int32 originId, WaitHandle aborted)
at Microsoft.VisualStudio.DesignTools.DesignerContract.Isolation.Remoting.STAMarshaler.DirectInvokeInbound(Action action, Int32 targetApartmentId)
at Microsoft.VisualStudio.DesignTools.DesignerContract.Isolation.Remoting.STAMarshaler.MarshalIn(Action action, Int32 targetApartmentId, CancellationToken cancelToken, CallSynchronizationMode syncMode, CallModality callModality, String methodName, String filePath, Int32 lineNumber)
at Microsoft.VisualStudio.DesignTools.DesignerContract.Isolation.Remoting.ThreadMarshaler.MarshalIn(IRemoteObject targetObject, Action action, CallSynchronizationMode syncMode, CallModality callModality, ApartmentState apartmentState, String memberName, String filePath, Int32 lineNumber)
at Microsoft.VisualStudio.DesignTools.DesignerContract.Isolation.Remoting.ThreadMarshaler.MarshalIn[TResult](IRemoteObject targetObject, Func`1 func, CallModality callModality, ApartmentState apartmentState, String memberName, String filePath, Int32 lineNumber)
at Microsoft.VisualStudio.DesignTools.HostUtility.AppPackage.WindowsXamlManifestUtility.GenerateManifestContents(IEnumerable`1 dependencyIdentifiers, IHostProject project, String& packageId)
at Microsoft.VisualStudio.DesignTools.HostUtility.AppPackage.WindowsXamlAppPackage.CreateManifestFile()
at Microsoft.VisualStudio.DesignTools.HostUtility.AppPackage.AppPackage.InitializeApplication()
at Microsoft.VisualStudio.DesignTools.HostUtility.AppPackage.WindowsXamlAppPackage.CreateOrRecover(IHostProject project, IHostProjectService projectService, IHostPlatformService platformService, IHostShadowCopyService shadowCopyService, PackageService packageService, IHostFileChangeWatcherService fileChangeWatcherService, String frameworkPackagePath)
at Microsoft.VisualStudio.DesignTools.HostUtility.AppPackage.PackageService.<>c__DisplayClass10_0.<.ctor>b__0(IHostProject project, IHostProjectService projectService, IHostPlatformService platformService, IHostShadowCopyService shadowCopyService)
at Microsoft.VisualStudio.DesignTools.HostUtility.AppPackage.PackageService.CreateAppPackage(IHostProject hostProject)
at Microsoft.VisualStudio.DesignTools.HostUtility.AppPackage.PackageService.GetOrCreateAppPackage(IHostProject project, Boolean& isCreated)
at Microsoft.VisualStudio.DesignTools.DesignerHost.HostServices.HostProject.get_AppPackage()
at Microsoft.VisualStudio.DesignTools.Designer.DesignerService.InitializePrimaryProject(IHostProject project)
at Microsoft.VisualStudio.DesignTools.Designer.DesignerService.InitializeLanguageContextComponents(IHostProject project)
at Microsoft.VisualStudio.DesignTools.Designer.DesignerService.CreateDesigner(IHostSourceItem item, IHostTextEditor editor, CancellationToken cancelToken)
at Microsoft.VisualStudio.DesignTools.DesignerContract.IsolatedDesignerService.IsolatedDesignerView.CreateDesignerViewInfo(CancellationToken cancelToken)
</description>
When I create a new project the designer works fine but I get the following error on project properties on Application tab:
Property accessor 'TargetDescriptions' on object 'Microsoft.VisualStudio.ProjectFlavoring.Automation.Project.CommonProjectExtender' threw the following exception:'Value cannot be null.
This happens either if I keep min version 10.0.10240 or leave min as 10586
Removing SDK 10240 worked to solve the designer issue in my "old" project, still the error at the project properties happens
UPDATE:
I completely uninstalled the Windows 10 SDK, along with the 8.1 SDK, then reinstalled only 10 SDK (10586) using the VS installer from the dev site https://developer.microsoft.com/en-us/windows/downloads
And it's worse now, I can't compile, the application tab in properties now says this:
An error occurred trying to load the page.
InvalidArgument=Value of '0' is not valid for 'SelectedIndex'.
Parameter name: SelectedIndex
Also when I try to create a new Blank Universal app I get the following message:
"Could not find a suitable SDK to target"
Well, the only thing that worked was uninstalling all standalone Windows SDKs, from 10586.11, 10586.15 and before, then reinstalling the 10586.15 again, this worked finally, just in case someone gets into this

Sitecore 7 ContentSearch crawling failure: "Crawler : AddRecursive DoItemAdd failed"

When we try to rebuild our Lucene (ContentSearch) indexes, our CrawlingLog is filled up with these exceptions:
7052 15:08:21 WARN Crawler : AddRecursive DoItemAdd failed - {5A1E50E4-46B9-42D5-B743-1ED10D15D47E}
Exception: System.AggregateException
Message: One or more errors occurred.
Source: mscorlib
at System.Threading.Tasks.Task.Wait(Int32 millisecondsTimeout, CancellationToken cancellationToken)
at System.Threading.Tasks.Task.Wait()
at System.Threading.Tasks.Parallel.PartitionerForEachWorker[TSource,TLocal](Partitioner`1 source, ParallelOptions parallelOptions, Action`1 simpleBody, Action`2 bodyWithState, Action`3 bodyWithStateAndIndex, Func`4 bodyWithStateAndLocal, Func`5 bodyWithEverything, Func`1 localInit, Action`1 localFinally)
at System.Threading.Tasks.Parallel.ForEachWorker[TSource,TLocal](IEnumerable`1 source, ParallelOptions parallelOptions, Action`1 body, Action`2 bodyWithState, Action`3 bodyWithStateAndIndex, Func`4 bodyWithStateAndLocal, Func`5 bodyWithEverything, Func`1 localInit, Action`1 localFinally)
at System.Threading.Tasks.Parallel.ForEach[TSource](IEnumerable`1 source, ParallelOptions parallelOptions, Action`1 body)
at Sitecore.ContentSearch.AbstractDocumentBuilder`1.AddItemFields()
at Sitecore.ContentSearch.LuceneProvider.CrawlerLuceneIndexOperations.GetIndexData(IIndexable indexable, IProviderUpdateContext context)
at Sitecore.ContentSearch.LuceneProvider.CrawlerLuceneIndexOperations.BuildDataToIndex(IProviderUpdateContext context, IIndexable version)
at Sitecore.ContentSearch.LuceneProvider.CrawlerLuceneIndexOperations.Add(IIndexable indexable, IProviderUpdateContext context, ProviderIndexConfiguration indexConfiguration)
at Sitecore.ContentSearch.SitecoreItemCrawler.DoAdd(IProviderUpdateContext context, SitecoreIndexableItem indexable)
at Sitecore.ContentSearch.HierarchicalDataCrawler`1.CrawlItem(Tuple`3 tuple)
Nested Exception
Exception: System.ArgumentOutOfRangeException
Message: Index and length must refer to a location within the string.
Parameter name: length
Source: mscorlib
at System.String.InternalSubStringWithChecks(Int32 startIndex, Int32 length, Boolean fAlwaysCopy)
at Sitecore.Data.ShortID.Encode(String guid)
at Sitecore.ContentSearch.FieldReaders.MultiListFieldReader.GetFieldValue(IIndexableDataField indexableField)
at Sitecore.ContentSearch.FieldReaders.FieldReaderMap.GetFieldValue(IIndexableDataField field)
at Sitecore.ContentSearch.LuceneProvider.LuceneDocumentBuilder.AddField(IIndexableDataField field)
at System.Threading.Tasks.Parallel.<>c__DisplayClass32`2.<PartitionerForEachWorker>b__30()
at System.Threading.Tasks.Task.InnerInvokeWithArg(Task childTask)
at System.Threading.Tasks.Task.<>c__DisplayClass11.<ExecuteSelfReplicating>b__10(Object param0)
This appears to be caused by the ShortID.Encode(string) method expecting the GUID in the string parameter to have brackets (" { " and " } ") around it. Some of our multilist field relationships were associated programmatically using Guid.ToString(), which does not include the brackets. Unfortunately, these values cause the ShortID.Encode() method to choke.
First things first: find all the places you call MultiListField.Add(string) and change Guid.ToString() to Guid.ToString("B"). This will resolve the issue for all new relationships.
Create a custom FieldReader class to replace the standard MultiListFieldReader (we called ours CustomMultiListFieldReader).
Set your custom class to inherit from Sitecore.ContentSearch.FieldReaders.FieldReader.
Decompile the Sitecore.ContentSearch.FieldReaders.MultiListFieldReader.GetFieldValue(IIndexableDataField) method into your custom class.
Before the if (ID.IsID(id)) line, add the following code:
if (!str.StartsWith("{") && !str.EndsWith("}"))
id = String.Format("{{{0}}}", str);
In your index configuration (we added ours to the default, Sitecore.ContentSearch.DefaultIndexConfiguration.config) change the fieldReaderType for the MultiList fields to your custom type. (This can be found in your config at sitecore/contentSearch/configuration/defaultIndexConfiguration/fieldReaders/mapFieldByTypeName/fieldReader.)
Full disclosure: I don't love this approach because if the default implementation of the MultiListFieldReader ever changed, we'd be without those changes. But this allows the items to be included in the index without reformatting all of the GUIDs in every multilist field.

AssertionFailure - collection was processed twice by flush() causes Orchard CMS site to crash

I am running Orchard CMS 1.7.2. I created a custom module called BYUtv.Shapes as a place to store reusable shape methods. I have a class called RelatedToShow : IDependency in this module. The method of interest in this class is called RelatedEpisodes. The purpose of this shape method is to retrieve Episodes data, via a query created in the admin ui, for Episodes related to a specific Show. In the manager the Episode content type definition has a Content Picker Field that allows a content manager to pick a Show that the Episode is part of or related to. The query that I created is working correctly and returning the correct data. With that explanation here is my shape method.
[Shape]
public IHtmlString RelatedEpisodes(dynamic Shape, dynamic Display, int? PageSize, string PagerSuffix = "")
{
// Retrieves the QueryPart by name for the query called Related Episodes Year.
// Related Episodes Year retrieves Episodes that are related to a specific show with an optional year filter.
QueryPart episodesQuery = GetQueryPartByName("Related Episodes Year");
dynamic pager = CreatePager(Shape, _projectionManager.GetCount(episodesQuery.Id), PageSize, PagerSuffix);
int startIndex = pager.Pager.GetStartIndex();
int pageSize = pager.Pager.PageSize;
IEnumerable<ContentItem> contentItems = new List<ContentItem>();
if(episodesQuery != null)
{
contentItems = _projectionManager.GetContentItems(episodesQuery.Id, startIndex, pageSize);
}
// Retrieves the QueryPart by name for the query called Related Episodes.
// Related Episodes retrieves Episodes that are related to a specific show.
QueryPart newestEpisodeQuery = GetQueryPartByName("Related Episodes");
ContentItem newestEpisode = null;
if (newestEpisodeQuery != null)
{
newestEpisode = _projectionManager.GetContentItems(newestEpisodeQuery.Id, 0, 1).FirstOrDefault();
}
// Retrieves a list of distinct years that the episodes premiered in.
List<string> years = _projectionManager.GetContentItems(newestEpisodeQuery.Id).Select(y => (string)((dynamic)y).TimeSpanPart.StartDateTime.Year.ToString()).Distinct().ToList();
return Display.RelatedEpisodesView(ContentItems: contentItems, Pager: pager, NewestEpisode: newestEpisode, YearFilter: GetYearFilter(), Years: years);
}
In all my testing this always works locally. It also works in production but seemingly randomly crashes the page it is used on in production. If I comment the code that runs this shape method in production than the rest of the page runs as desired. The only difference that I am aware of between production and local is possibly the HostCompontents.config file and the traffic volume. In production I turn off several properties because I understand it will help performance.
Here are the logs from the production server.
Exception information:
Exception type: AssertionFailure
Exception message: collection was processed twice by flush()
at NHibernate.Engine.Collections.PrepareCollectionForUpdate(IPersistentCollection collection, CollectionEntry entry, EntityMode entityMode, ISessionFactoryImplementor factory) in c:\Users\sebros\Documents\My Projects\nhibernate-core\src\NHibernate\Engine\Collections.cs:line 164
at NHibernate.Event.Default.AbstractFlushingEventListener.FlushCollections(IEventSource session) in c:\Users\sebros\Documents\My Projects\nhibernate-core\src\NHibernate\Event\Default\AbstractFlushingEventListener.cs:line 92
at NHibernate.Event.Default.AbstractFlushingEventListener.FlushEverythingToExecutions(FlushEvent event) in c:\Users\sebros\Documents\My Projects\nhibernate-core\src\NHibernate\Event\Default\AbstractFlushingEventListener.cs:line 61
at NHibernate.Event.Default.DefaultAutoFlushEventListener.OnAutoFlush(AutoFlushEvent event) in c:\Users\sebros\Documents\My Projects\nhibernate-core\src\NHibernate\Event\Default\DefaultAutoFlushEventListener.cs:line 32
at NHibernate.Impl.SessionImpl.AutoFlushIfRequired(ISet`1 querySpaces) in c:\Users\sebros\Documents\My Projects\nhibernate-core\src\NHibernate\Impl\SessionImpl.cs:line 1180
at NHibernate.Impl.SessionImpl.List(String query, QueryParameters queryParameters, IList results) in c:\Users\sebros\Documents\My Projects\nhibernate-core\src\NHibernate\Impl\SessionImpl.cs:line 616
at NHibernate.Impl.SessionImpl.List(String query, QueryParameters parameters) in c:\Users\sebros\Documents\My Projects\nhibernate-core\src\NHibernate\Impl\SessionImpl.cs:line 593
at NHibernate.Impl.QueryImpl.List() in c:\Users\sebros\Documents\My Projects\nhibernate-core\src\NHibernate\Impl\QueryImpl.cs:line 64
at NHibernate.Impl.AbstractQueryImpl.UniqueResult() in c:\Users\sebros\Documents\My Projects\nhibernate-core\src\NHibernate\Impl\AbstractQueryImpl.cs:line 960
at Orchard.ContentManagement.DefaultHqlQuery.Count() in c:\Source\BYUB\byuradio2\orchard\src\Orchard\ContentManagement\DefaultHqlQuery.cs:line 212
at Orchard.Projections.Services.ProjectionManager.<GetCount>b__14(IHqlQuery contentQuery)
at System.Linq.Enumerable.WhereSelectEnumerableIterator`2.MoveNext()
at System.Linq.Enumerable.Sum(IEnumerable`1 source)
at Orchard.Projections.Services.ProjectionManager.GetCount(Int32 queryId)
at BYUtv.Shapes.Drivers.RelatedToShow.RelatedEpisodes(Object Shape, Object Display, Nullable`1 PageSize, String PagerSuffix)
and
Stack trace: at NHibernate.Engine.Collections.PrepareCollectionForUpdate(IPersistentCollection collection, CollectionEntry entry, EntityMode entityMode, ISessionFactoryImplementor factory) in c:\Users\sebros\Documents\My Projects\nhibernate-core\src\NHibernate\Engine\Collections.cs:line 164
at NHibernate.Event.Default.AbstractFlushingEventListener.FlushCollections(IEventSource session) in c:\Users\sebros\Documents\My Projects\nhibernate-core\src\NHibernate\Event\Default\AbstractFlushingEventListener.cs:line 92
at NHibernate.Event.Default.AbstractFlushingEventListener.FlushEverythingToExecutions(FlushEvent event) in c:\Users\sebros\Documents\My Projects\nhibernate-core\src\NHibernate\Event\Default\AbstractFlushingEventListener.cs:line 61
at NHibernate.Event.Default.DefaultAutoFlushEventListener.OnAutoFlush(AutoFlushEvent event) in c:\Users\sebros\Documents\My Projects\nhibernate-core\src\NHibernate\Event\Default\DefaultAutoFlushEventListener.cs:line 32
at NHibernate.Impl.SessionImpl.AutoFlushIfRequired(ISet`1 querySpaces) in c:\Users\sebros\Documents\My Projects\nhibernate-core\src\NHibernate\Impl\SessionImpl.cs:line 1180
at NHibernate.Impl.SessionImpl.List(String query, QueryParameters queryParameters, IList results) in c:\Users\sebros\Documents\My Projects\nhibernate-core\src\NHibernate\Impl\SessionImpl.cs:line 616
at NHibernate.Impl.SessionImpl.List(String query, QueryParameters parameters) in c:\Users\sebros\Documents\My Projects\nhibernate-core\src\NHibernate\Impl\SessionImpl.cs:line 593
at NHibernate.Impl.QueryImpl.List() in c:\Users\sebros\Documents\My Projects\nhibernate-core\src\NHibernate\Impl\QueryImpl.cs:line 64
at NHibernate.Impl.AbstractQueryImpl.UniqueResult() in c:\Users\sebros\Documents\My Projects\nhibernate-core\src\NHibernate\Impl\AbstractQueryImpl.cs:line 960
at Orchard.ContentManagement.DefaultHqlQuery.Count() in c:\Source\BYUB\byuradio2\orchard\src\Orchard\ContentManagement\DefaultHqlQuery.cs:line 212
at Orchard.Projections.Services.ProjectionManager.<GetCount>b__14(IHqlQuery contentQuery)
at System.Linq.Enumerable.WhereSelectEnumerableIterator`2.MoveNext()
at System.Linq.Enumerable.Sum(IEnumerable`1 source)
at Orchard.Projections.Services.ProjectionManager.GetCount(Int32 queryId)
at BYUtv.Shapes.Drivers.RelatedToShow.RelatedEpisodes(Object Shape, Object Display, Nullable`1 PageSize, String PagerSuffix)
The error seems to always relate to collection was processed twice by flush(). I have even tried creating the query directly in the code with similar results.
Another question that was posted is Orchard cms 1.7.2 GenericADOException. Some of the side effects expressed there are similar to what I am having.
Are there any glaring issues that you can see in this code that are causing these errors?
Have you run into this or similar issues?
Any thoughts on how to resolve this problem?

Updating/Inserting is not supported by data source

I've been making my first ASP.NET Visual Studio website and I have just started working with databases, I've made a table and a backoffice page for me to control the content of my table.
This page follows the following rules:
-> I've added the SQLDataSource and configured.
-> I've added a gridview to see my content and configured it to my SQLDataSource, here I've added the Edit/Delete options.
-> I've added a DetailsView configured to my SWLDataSource, here I've added New option (to create new entries in my table)
My database has the id column set as primary key (data type=int; allow nulls=not checked)
Every time I try to update my data base through this backoffice page I get the following error:
Updating is not supported by data
source 'SqlDataSource1' unless
UpdateCommand is specified.
Description: An unhandled exception
occurred during the execution of the
current web request. Please review the
stack trace for more information about
the error and where it originated in
the code.
Exception Details:
System.NotSupportedException: Updating
is not supported by data source
'SqlDataSource1' unless UpdateCommand
is specified.
Source Error:
An unhandled exception was generated
during the execution of the current
web request. Information regarding the
origin and location of the exception
can be identified using the exception
stack trace below.
Stack Trace:
[NotSupportedException: Updating is
not supported by data source
'SqlDataSource1' unless UpdateCommand
is specified.]
System.Web.UI.WebControls.SqlDataSourceView.ExecuteUpdate(IDictionary
keys, IDictionary values, IDictionary
oldValues) +1644420
System.Web.UI.DataSourceView.Update(IDictionary
keys, IDictionary values, IDictionary
oldValues,
DataSourceViewOperationCallback
callback) +92
System.Web.UI.WebControls.GridView.HandleUpdate(GridViewRow
row, Int32 rowIndex, Boolean
causesValidation) +907
System.Web.UI.WebControls.GridView.HandleEvent(EventArgs
e, Boolean causesValidation, String
validationGroup) +704
System.Web.UI.WebControls.GridView.OnBubbleEvent(Object
source, EventArgs e) +95
System.Web.UI.Control.RaiseBubbleEvent(Object
source, EventArgs args) +37
System.Web.UI.WebControls.GridViewRow.OnBubbleEvent(Object
source, EventArgs e) +123
System.Web.UI.Control.RaiseBubbleEvent(Object
source, EventArgs args) +37
System.Web.UI.WebControls.LinkButton.OnCommand(CommandEventArgs
e) +118
System.Web.UI.WebControls.LinkButton.RaisePostBackEvent(String
eventArgument) +135
System.Web.UI.WebControls.LinkButton.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String
eventArgument) +10
System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler
sourceControl, String eventArgument)
+13 System.Web.UI.Page.RaisePostBackEvent(NameValueCollection
postData) +175
System.Web.UI.Page.ProcessRequestMain(Boolean
includeStagesBeforeAsyncPoint, Boolean
includeStagesAfterAsyncPoint) +1565
I could really use some help here!
The errormessage says it all : 'Updating is not supported by data source 'SqlDataSource1' unless UpdateCommand is specified.'. You have to assign sql code or the name of a stored procedure to the property UpdateCommand so that the SqlDataSource knows how to handle your update.