Entity Framework Параметризованные / перегруженные конструкторы? - PullRequest
5 голосов
/ 17 марта 2011

Я видел похожие вопросы, но они не совсем те, на которые я ссылаюсь (или, может быть, они есть, и я не понимаю ответы)

В моем предыдущем приложении, использующем Linq2SQL, я смогперегружайте конструкторы параметрами, выполняя это:

Namespace CoreDb    
  Partial Public Class Accomplishment

    Public Sub New(ByVal accomplishmentTypeID As Object, ByVal description As String, ByVal title As String, ByVal applicableDate As DateTime, ByVal lastUpdatedBy As String)
        Me.New()

        If TypeOf (accomplishmentTypeID) Is Guid Then
            Me.AccomplishmentTypeId = accomplishmentTypeID
        End If

        If TypeOf (accomplishmentTypeID) Is String Then
            Me.AccomplishmentTypeId = New Guid(accomplishmentTypeID.ToString())
        End If

        Me.Description = description
        Me.ApplicableDate = applicableDate
        Me.Title = title
        Me.Id = Guid.NewGuid()
        Me.DateCreated = DateTime.Now
        Me.DateModified = DateTime.Now
        Me.LastUpdatedBy = lastUpdatedBy
        Me.CreatedBy = lastUpdatedBy
    End Sub
 End Class
End Namespace

В основном, используя частичный класс вне объекта, разделяя пространство имен файла .dbml и вызывая конструктор по умолчанию, а затем выполняя дополнительные действия.

Итак, в моем коде я мог бы сделать что-то вроде:

Dim accomplishment As New Accomplishment(id, description, title, applicableDate, lastUpdatedBy)

Это, похоже, больше не работает в Entity Framework, так как нет конструктора по умолчанию для вызова.

Это больше не работает?И если да, что является хорошей альтернативой для реализации чего-то подобного?

Ответы [ 2 ]

9 голосов
/ 17 марта 2011

Нет созданного конструктора по умолчанию, но это не значит, что его нет. Но когда вы определяете конструктор с параметрами в классе, для которого явно не задан конструктор без параметров, он скрывает конструктор по умолчанию.

Так что в вашем частичном классе вам просто нужно также определить конструктор без параметров.

2 голосов
/ 13 июня 2012

В текущей версии EF на момент написания этой статьи, хотя вам необходим конструктор без параметров, он, похоже, прекрасно работает с конструктором private без параметров. Так что вы можете сделать это:

Public Class Customer

  ' only usable by EF
  Private Sub New()
  End Sub

  ' what you or your class consumers will use
  Public Sub New(firstName As String, lastName As String)
      Me.New()
      ' assign properties, etc.
  End Sub

  ' etc.

End Class
...