Сессия Nhibernate закрыла проблему исключения с сеткой Asp.net MVC Telerik AJAX - PullRequest
0 голосов
/ 27 января 2011

Я получаю закрытое исключение Nhibernate Session с сеткой asp.net mvc telerik ajax.Сетка привязана к сущности Sale, у которой есть связанная сущность User.Исключение выдается при попытке получить доступ к сущности пользователя.Я использовал fetchMode, чтобы загрузить его, но я все еще получаю то же исключение.Это исключение возникает, только если я переключаюсь между страницами сетки несколько раз.Кто-нибудь сталкивался с этой проблемой?

Код для доступа к данным выглядит следующим образом:

public IList<Sale> List()
        {
            var manager = new ManagerFactory().GetSaleManager();
            var iCriteria = manager.Session.GetISession().CreateCriteria(typeof(Sale))
                .SetFetchMode("AspnetUser3.Agents3", FetchMode.Eager);

            return iCriteria.List<Sale>();
        }

Код, который пытается получить доступ к связанному объекту в графе объектов, выглядит следующим образом:

AgentId = sale.AspnetUser3.Agents3[0].Id,

Исключение

NHibernate.Exceptions.GenericADOException: could not load an entity: [SalesEntry.Data.Model.AspnetUser#7aaabf99-d77d-4edf-b949-9c4c0f3e85d8][SQL: SELECT aspnetuser0_.[UserId] as column1_12_0_, aspnetuser0_.[UserName] as column2_12_0_, aspnetuser0_.[LoweredUserName] as column3_12_0_, aspnetuser0_.[MobileAlias] as column4_12_0_, aspnetuser0_.[IsAnonymous] as column5_12_0_, aspnetuser0_.[LastActivityDate] as column6_12_0_, aspnetuser0_.[ApplicationId] as column7_12_0_ FROM [dbo].[aspnet_Users] aspnetuser0_ WHERE aspnetuser0_.[UserId]=?] ---> System.ObjectDisposedException: Session is closed!
Object name: 'ISession'.

1 Ответ

2 голосов
/ 27 января 2011

Это происходит потому, что пользователь загружается лениво, и вы, вероятно, видите ситуацию, когда сессия закрывается до загрузки объекта пользователя. Затем, когда Grid обращается к пользовательской ссылке, вы получаете это исключение. Убедитесь, что вы следуете шаблону Unit of Work .

Также вы можете использовать класс Model для привязки к вашей сетке, а не к сущности напрямую. Таким образом вы контролируете, какой тип доступа осуществляется, и избегаете непредвиденных изменений в ваших сущностях / базе данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...