我见过类似的问题,但他们不是我所指的(或者他们是,我不明白答案)实体框架参数化/重载的构造函数?
在我以前的应用程序使用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)
这似乎是在实体框架不再工作,因为没有默认的构造函数调用。
这不工作?如果是的话,执行这样的事情有什么好的选择?
+1事实上,你*有*做到这一点,否则EF将无法实例化您的类时,实现您的查询! – 2011-03-17 16:49:10
您是否看过Designer文件以查看构造函数是什么?如果你没有默认的构造函数,你如何创建一个'Accomplishment'的实例?所以必须有一个默认的构造函数。 – 2011-03-17 16:49:26
@Thomas:没有明确创建的默认构造函数。正如@Frant所说的,你必须定义一个简单的空无参数构造函数**来调用基础构造函数**。 – 2011-03-17 16:50:22