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

时间:2015-09-20 09:40:42

标签: c# entity-framework constructor

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

使用以下示例代码:

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

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

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

1 个答案:

答案 0 :(得分:2)

您应该查看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);
        }
    }
}
BT声明这听起来不错。我不会在自己的构造函数中填充域对象。

这是一项很好的责任for the repository