DNN DAL2 Ошибка в Create, Update, Delete ... Работает просто отлично - PullRequest
0 голосов
/ 06 мая 2018

У меня проблемы с модулем DNN DAL2, написанным на VB. Это установка DNN 7.3.2.

Методы Get модуля работают нормально, но методы Create, Update и Delete выдают ошибки, подобные этому:

    DotNetNuke.Services.Exceptions.ModuleLoadException: Object reference not set to an instance of an object. ---> System.NullReferenceException: Object reference not set to an instance of an object. 

    at DotNetNuke.Data.RepositoryBase`1.GetPropertyValue[TProperty](T item, String propertyName) 
    at DotNetNuke.Data.RepositoryBase`1.GetScopeValue[TProperty](T item) 
    at DotNetNuke.Data.RepositoryBase`1.ClearCache(T item) 
    at DotNetNuke.Data.RepositoryBase`1.Update(T item) 
    at TAC.DNN.Modules.TAC_NPIDal2.Components.ForumReadController.UpdateForumRead(ForumRead t) in D:\Websites\npi1-2017\DesktopModules\TAC_NPIDal2\Components\ForumReadController.vb:line 79 
    at TAC.DNN.Modules.TAC_NPIForum.Thread.Page_Load(Object sender, EventArgs e) in D:\Websites\npi1-2017\DesktopModules\TAC_NPIForum\Thread.ascx.vb:line 121 

The Forum class is defined like this:

<TableName("NPIForum_Read")>
<PrimaryKey("ID", AutoIncrement:=True)>
<Cacheable("NPIForumRead", CacheItemPriority.Default, 20)>
<Scope("ForumID")>
Public Class ForumRead

    Private _ID As Integer
    Private _userID As Integer
    Private _forumID As Integer
    Private _threadID As Integer
    Private _lastViewed As DateTime

(и с соответствующими Gets и Sets)

And the UpdateForumRead method is defined like this:

        Public Sub UpdateForumRead(ByVal t As ForumRead)

            Using ctx As IDataContext = DataContext.Instance()
                Dim rep As IRepository(Of ForumRead) = ctx.GetRepository(Of ForumRead)()
                rep.Update(t)
            End Using
        End Sub

Теперь база данных фактически обновлена. Сгенерированный код SQL выполняется без ошибок и таблица ForumThreads обновляется. Ошибка происходит это. При пошаговом выполнении исключение выдается в операторе «End Using». Кроме того, объект t в порядке и не имеет проблем.

Есть идеи на этот счет?

Спасибо

Ответы [ 2 ]

0 голосов
/ 11 мая 2018

Смотрите мой последний ответ Скотту. Вот и ответ!

0 голосов
/ 10 мая 2018

Я думаю, что ошибка возникает после обновления, когда DAL2 пытается сделать недействительным кеш.

Два возможных вопроса:

  1. Вновь вставленная запись (или возможные существующие записи в таблице имеют NULL ForumID. Поскольку вы указали, что это поле Scope, оно должно быть NOT NULL в таблице и должно иметь значение.
  2. Ваш первичный ключ, ID, не является идентификатором в базе данных? Вы указали в своем классе модели DAL, что это автоинкремент, поэтому DAL2 / Petapoco предполагает, что база данных сгенерирует его.
...