Невозможно привести объект типа «MyType» к типу «Castle.Proxies.MyType» - PullRequest
2 голосов
/ 03 июля 2010

В какой ситуации возникает следующая ошибка?

Невозможно привести объект типа 'MyType' к типу 'Castle.Proxies.MyType'.

UPDATE:

Я получил это сообщение об ошибке при привязке MyType.FindAllByProperty("col1", "foo"); к GridView (в точности, как у Telerik: RadGrid). Эта ошибка не происходит каждый раз, просто иногда. Вот разметка моей сетки:

<telerik:RadGrid ID="grdList" runat="server" AutoGenerateColumns="false" OnNeedDataSource="grdList_NeedDataSource"
    OnUpdateCommand="grdList_UpdateCommand" AllowAutomaticUpdates="True" OnItemUpdated="grdList_ItemUpdated"
    AllowMultiRowEdit="true">
    <MasterTableView EditMode="InPlace" DataKeyNames="PageInRole_id" AllowAutomaticUpdates="true">
        <Columns>
            <telerik:GridBoundColumn DataField="ContainerPage.PageTitle" HeaderText="Title" UniqueName="ContainerPage.PageTitle"
                ReadOnly="true" />
        </Columns>
    </MasterTableView>
</telerik:RadGrid>

UPDATE2

Вот все сообщения об исключениях и трассировка стека:

Unable to cast object of type 'PineCMS.Core.PageInRole' to type 'Castle.Proxies.PageInRoleProxy'. 
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.InvalidCastException: Unable to cast object of type 'PineCMS.Core.PageInRole' to type 'Castle.Proxies.PageInRoleProxy'.

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: 


[InvalidCastException: Unable to cast object of type 'PineCMS.Core.PageInRole' to type 'Castle.Proxies.PageInRoleProxy'.]
   Telerik.Web.UI.GetEnumerator>d__0.MoveNext() +175
   Telerik.Web.UI.GridDataTableFromEnumerable.FillDataTableFromEnumerable(IQueryable enumerable) +1285
   Telerik.Web.UI.GridDataTableFromEnumerable.FillData35() +3390
   Telerik.Web.UI.GridDataTableFromEnumerable.FillData() +824
   Telerik.Web.UI.GridResolveEnumerable.EnsureInitialized() +28
   Telerik.Web.UI.GridEnumerableFromDataView..ctor(GridTableView owner, IEnumerable enumerable, Boolean CaseSensitive, Boolean autoGenerateColumns, GridColumnCollection presentColumns, String[] additionalField, Boolean retrieveAllFields) +242
   Telerik.Web.UI.GridDataSourceHelper.CreateGridEnumerable(GridTableView owner, IEnumerable enumerable, Boolean caseSensitive, Boolean autoGenerateColumns, GridColumnCollection presentColumns, String[] additionalField, Boolean retrieveAllFields) +223
   Telerik.Web.UI.GridDataSourceHelper.GetResolvedDataSource(GridTableView owner, Object dataSource, String dataMember, Boolean caseSensitive, Boolean autoGenerateColumns, GridColumnCollection presentColumns, String[] additionalField, Boolean retrieveAllFields) +595
   Telerik.Web.UI.GridTableView.get_ResolvedDataSource() +243
   Telerik.Web.UI.GridTableView.CreateChildControls(IEnumerable dataSource, Boolean useDataSource) +42
   System.Web.UI.WebControls.CompositeDataBoundControl.PerformDataBinding(IEnumerable data) +72
   System.Web.UI.WebControls.DataBoundControl.OnDataSourceViewSelectCallback(IEnumerable data) +147
   System.Web.UI.WebControls.DataBoundControl.PerformSelect() +261
   Telerik.Web.UI.GridTableView.PerformSelect() +23
   Telerik.Web.UI.GridTableView.DataBind() +363
   Telerik.Web.UI.GridTableView.Rebind() +101
   Telerik.Web.UI.GridCommandEventArgs.ExecuteCommand(Object source) +1174
   Telerik.Web.UI.RadGrid.OnBubbleEvent(Object source, EventArgs e) +185
   System.Web.UI.Control.RaiseBubbleEvent(Object source, EventArgs args) +70
   Telerik.Web.UI.GridItem.OnBubbleEvent(Object source, EventArgs e) +142
   System.Web.UI.Control.RaiseBubbleEvent(Object source, EventArgs args) +70
   System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl, String eventArgument) +29
   System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +2981




--------------------------------------------------------------------------------
Version Information: Microsoft .NET Framework Version:2.0.50727.4927; ASP.NET Version:2.0.50727.4927

Ответы [ 2 ]

2 голосов
/ 12 апреля 2011

Это исключение, вероятно, происходит из кода, пытающегося повторно присоединить прокси / ленивый объект к сеансу.Наиболее вероятный вызов API для выдачи этого исключения с более новым NHibernate (у меня нет проблем с 2.1, но у меня есть проблемы с последними): Session.Lock(obj, LockMode.None).

Если программист этого компонента сначала выселяетсущность из ISession, а затем перезагружает ее (возможно, кеширует?) в другую по id или выполняет ISession.Update эта проблема должна исчезнуть, пока команда NHibernate не выяснит основную проблему.

0 голосов
/ 02 апреля 2014

У меня была похожая проблема с EntityFramework 6.0.Я перешел со старой версии EntityFramework, в которой не использовались прокси-серверы, и имел некоторый код, который создавал и присоединял новые экземпляры сущности через new MyEntity();.

Мое решение состояло в том, чтобы использовать dbContext.MyEntity.Create(); вместо этого, чтобы я работал только с прокси.Нечто подобное должно быть доступно для NHibernate, если я правильно помню.

Моя ошибка была:

Невозможно привести объект типа 'MyProject.MyEntity' к типу 'System.Data.Entity..DynamicProxies.MyEntity_849E94C98E5E543D6DF5245252144E3EAC00131F811886276B6ABD991719D232 '

...