c#类构造函数赋值给'this'
本文关键字:this 构造函数 赋值 | 更新日期: 2023-09-27 18:13:40
我有一个'naïve'的问题。
使用以下示例代码:
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
?
以下两个答案都是正确的,但我只能接受一个。关于工厂和存储库模式的使用进行了一些有趣的讨论,遗憾的是,当可能的答案被删除时,这些模式也被删除了。支持和反对的观点都是平衡的,一些人指出实体框架本身就是一个使用存储库模式的工厂。这个问题本身有三个赞成和两个反对。
您应该看一下AutoMapper,您的代码可能如下所示:
// Somewhere in your application/service initialization class and in some method...
Mapper.CreateMap<ThisClass, ThisClass>();
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);
}
}
}
顺便说一句,这听起来是个坏主意。我不会在域对象自己的构造函数中填充域对象。
是否有任何方法创建一个简单的构造函数返回数据库实体到这个?
在实践中理论上你可以制造a型struct
。然后,代码应该可以编译。你可以在struct中赋值给this。
可能根本就不应该使用构造函数。创建一个简单地返回Find结果的工厂方法。
关于构造函数的一个不可改变的事实是,它们每次都创建一个新的对象。我觉得你不会想要这个的。您可能希望保留现有的对象实例及其标识。