我想使用构造函数创建一个Employee对象;
public Employee(int _employeeId)
在体内,我想从数据库中读取一名员工。 但是我无法逃脱;
using (SHPContainerEntities db = new SHPContainerEntities())
{
this = db.Employee.Where(x =>x.EmployeeId == _employeeId).SingleOrDefault() as Employee;
}
因为“this”是readonly。 那我该怎么做呢?
答案 0 :(得分:4)
您可以将其重新编写为静态方法:
public static Employee Get(int id) {
return db.Employee.SingleOrDefault(x => x.EmployeeID == id);
}
(注意:以上仅用于说明;与静态数据上下文(db
)相关的真正的问题 - 请勿这样做!它应该真正使用GetContext()
方法或类似方法,担心这一点)
答案 1 :(得分:2)
正如所指出的,你不能设置“this”,因为它是只读的(有充分理由)。在您的情况下,对象已在构造函数执行时创建,这意味着您无法更改对象的类型。 您可以查看(以及已经提出的内容)的是使用静态方法为您创建类。查找“工厂”设计模式,例如http://en.wikipedia.org/wiki/Factory_method_pattern
答案 2 :(得分:1)
您必须更改编码风格。你需要从其他地方获得员工。例如,尝试使用存储库模式:
var employee = EmployeeRepository.GetEmployee(emplieeID);
答案 3 :(得分:0)
您可以在另一个实际创建Employee对象的类中执行此操作。
答案 4 :(得分:0)
...姆
'this'是对当前对象实例的引用。在ctor中,您正在创建和构建对象本身。你不能在ctor中更改你的引用并分配给你自己,这是不允许改变它或只读的根本原因。
其他人提到的工厂模式就是解决方案。
HTH