Почему я не могу создать элемент скаффолда из унаследованного класса - PullRequest
0 голосов
/ 24 июня 2019

У меня есть два проекта с некоторыми классами, которые являются расширениями класса DBContext для сохранения текущего имени пользователя в базе данных:

  • project DataModel:

    Public MustInherit Class ModelBase Inherits DbContext
      Public Sub New()
        MyBase.New()
        Me.CurrentUser = "unknown"
      End Sub
    
      Public Sub New(user As String)
        Me.New
        Me.CurrentUser = user
      End Sub 
    End Class
    
    Public Class Model Inherits ModelBase
      Public Sub New(user As String)
        MyBase.New(user)
      End Sub
    End Class
    
  • UI проекта (MVC):

    Public Class ModelUI Inherits DataModel.Model
      Public Sub New()
        MyBase.New(HttpContext.Current.User.Identity.Name)
      End Sub
    End Class
    

Итак, простой обзор наследования:

ModelBase
  |
  \- Model
       |
       \- ModelUI

В описанной выше ситуации Iполучить следующие ошибки при попытке компоновки контроллера MVC в проекте пользовательского интерфейса:

  • Использование Datamodel.ModelBase

    Произошла ошибка при запуске выбранного генератора кода: 'Исключение было выдано целью вызова.'

  • Использование Datamodel.Model или UI.ModelUI

    Произошла ошибказапуск выбранного генератора кода: «Ссылка на объект не установлена ​​для экземпляра объекта.»

Когда я удаляю MustInherit из Datamodel.ModelBase, я могу создать контроллер scaffoldedбез проблем.Однако я все еще не могу создать контроллер scaffolded из унаследованных классов:

  • Использование UI.ModelUI:

    Произошла ошибка при выполнении выбранного кодагенератор: 'Исключение было выдано целью вызова.'

  • Использование Datamodel.Model:

    Произошла ошибка при запускегенератор выбранного кода: «Для этого объекта не определен конструктор без параметров».

Итак, мой текущий обходной путь:

  • удалить MustInherit из базыclass
  • решение по перестройке
  • создание элементов лесов из базового класса
  • изменение используемого класса в элементах лесов на использование дочернего класса

    Private db As New DataModel.ModelBase
    

    до

    Private db As New ModelUI
    
  • добавить MustInherit обратно в базовый класс

  • решение по перестройке
  • ...

Есть идеи, зачем мне все это делать?

...