实体框架参数化/重载构造函数?

时间:2011-03-17 16:34:19

标签: .net vb.net entity-framework entity-framework-4 constructor

我见过类似的问题,但他们并不是我所指的(或者他们是,我不明白答案)

在我之前使用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 个答案:

答案 0 :(得分:9)

没有生成任何默认构造函数,但这并不意味着它没有。但是当您在没有显式设置无参数构造函数的类中定义带参数的构造函数时,它将隐藏默认构造函数。

所以在你的部分类中你只需要定义一个无参数的构造函数。

答案 1 :(得分:2)

在撰写本文时,在当前版本的EF中,虽然您确实需要一个无参数构造函数,但它似乎可以与私有无参数构造函数一起使用。所以你可以这样做:

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