分配给’this’的C#类构造函数

我有一个’天真’的问题。

使用以下示例代码:

public class ThisClass { public int ThisClassID { get; set; } public string ThisValue { get; set;} public ThisClass() { } public ThisClass(int thisClassID) { using (MyContext dbContext = new MyContext()) { this = dbContext.CaseNotes.Find(thisClassID); } } } 

当然,我收到错误Cannot assign to 'this' because it is read-only

我所知道的解决这个问题的唯一两种方法是使用静态方法,或者分别分配给每个属性。

有没有办法创建一个简单的构造函数,将数据库实体返回this

更新以下两个答案都是正确的,但我只接受一个。 关于工厂和存储库模式的使用进行了一些有趣的讨论,当删除可能的答案时,这些模式被遗忘地删除了。 参数同样是平衡的,有些人指出entity framework本身是一个使用存储库模式的工厂。 问题本身有三个upvotes和两个downvotes。

答案似乎是没有单一答案。

您应该看看AutoMapper ,您的代码可能如下所示:

 // Somewhere in your application/service initialization class and in some method... Mapper.CreateMap(); public class ThisClass { public int ThisClassID { get; set; } public string ThisValue { get; set;} public ThisClass() { } public ThisClass(int thisClassID) { using (MyContext dbContext = new MyContext()) { Mapper.Map(dbContext.CaseNotes.Find(thisClassID), this); } } } 

顺便说一下,这听起来不错。 我不会在自己的构造函数中填充域对象。

这对存储库来说是一个很好的责任。

有没有办法创建一个简单的构造函数,将数据库实体返回到此?

在实践中没有。 理论上,您可以将类型struct 。 然后,代码应该编译。 您可以在结构中分配给它。

可能你根本不应该使用构造函数。 创建一个简单地从Find返回结果的工厂方法。

关于构造函数的一个不可改变的事实是它们每次都创建一个新的对象。 我认为你不想要这个。 您可能希望保留现有对象实例及其标识。