我在一个实体中看到了一些奇怪的行为,我创建了一个部分类来覆盖ToSting方法,并在创建该实体的新实例时提供一些基本的属性设置(例如我可能会设置一个在构造函数中将日期命令为“Now”。
这种奇怪的行为使我仔细研究了部分类,我很惊讶地发现即使正在检索一组预先存在的记录,也会为每个检索到的记录调用构造函数。
下面是我可能拥有的一个非常简单的例子:
Partial Public Class Product
Public Sub New()
CostPrice = 0.0
ListPrice = 0.0
End Sub
Public Overrides Function ToString() As String
Return ProductDescription
End Function
End Class
我有两个问题:
1)如果你添加一个添加构造函数的分部类,这是实体框架中的这种正常行为吗?
2)如果没有,那么我必须假设我做错了什么,那么正确的方法是什么 覆盖构造函数以执行与上面提到的示例类似的操作?
感谢您提供的任何见解。
这是在vb项目中使用EF 5.0
答案 0 :(得分:1)
考虑导致从数据库中检索实体的事件序列。基本上它应该是这样的:
每个检索到的行的给出如下:
每次创建实例时,都会调用构造函数。
我认为你在混音:
两者都可以在构造函数中完成,至少部分完成。
答案 1 :(得分:0)
new
,如果没有显式声明构造函数,则调用default constructor will be created by the compiler。
除非该类是静态的,否则C#编译器会为没有构造函数的类提供一个公共默认构造函数,以便启用类实例化。
在为Entity Framework定义POCO类时,该类必须具有默认构造函数,并且EF将始终调用此默认构造函数,无论您是已明确定义它还是编译器为您执行此操作。
如果出于任何原因,您需要在实例化时将任何内容传递给类,您可以use the ObjectContext.ObjectMaterialized
event。