【发布时间】:2014-08-25 08:18:46
【问题描述】:
POCO 可以包含构造函数吗?你能告诉我这门课是否正确吗?我还读到 POCO 必须有一个无参数的构造函数。这是正确的,为什么?如果我接受这个无参数构造函数,我的只读Id 属性就会出现问题。对我来说,如果这个属性必须是只读的,那么初始化它的唯一方法就是在构造函数中。
[DataContract]
public class MembershipUser
{
public MembershipUser(Guid idValue)
{
this.Id = idValue;
}
[DataMember]
public virtual readonly Guid Id { get; set; }
[DataMember]
public virtual string UserName { get; set; }
[DataMember]
public virtual string Email { get; set; }
}
【问题讨论】:
-
会编译吗?是的。我们知道它是否适合您的需求吗?当然不是。就目前而言,这不是一个好问题。
-
如果您在实体框架代码优先的上下文中指代 POCO,那么不,实体框架将不支持您的类。你需要一个无参数的构造函数。
-
WCF 也不会,它基于您所定位的
[DataContract]属性。 -
POCO 不是严格定义的术语(即 SO 定义的变体在链接 duplicate question 中)。所以“POCO 可以有 XXXX”不能比链接的问题更好地回答。如果您使用特定框架 POCO 可能意味着“普通对象”的某些特定子集,并且可能需要也可能不需要特定功能作为默认构造函数的存在或不存在。如果需要,请随时单独询问更具体的版本。
-
旁注:我个人不会将此类对象称为“POCO”,因为您的代码意味着继承并且感觉超出了“普通”对象的范围。