C#使用ID在构造函数中创建对象

时间:2010-10-28 09:15:15

标签: c#

我想使用构造函数创建一个Employee对象;

public Employee(int _employeeId)

在体内,我想从数据库中读取一名员工。 但是我无法逃脱;

using (SHPContainerEntities db = new SHPContainerEntities())
{
    this = db.Employee.Where(x =>x.EmployeeId == _employeeId).SingleOrDefault() as Employee;
}

因为“this”是readonly。 那我该怎么做呢?

5 个答案:

答案 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