C# 在构造函数中使用IDataRecord初始化对象(实体)是一个好主意吗?

C# 在构造函数中使用IDataRecord初始化对象(实体)是一个好主意吗?,c#,C#,还是违背了某种范式 using System.Data; //This is a read only entity class Entity { public Entity(IDataRecord data) { ID = (int)data["ID"]; Name = data["Name"].ToString(); Value = data["Value"] is DBNull ? default(int?) : (int)data[

还是违背了某种范式

using System.Data;
//This is a read only entity
class Entity
{
    public Entity(IDataRecord data)
    {
       ID = (int)data["ID"];
       Name = data["Name"].ToString();
       Value = data["Value"] is DBNull ? default(int?) : (int)data["Value"];
    }
    public int ID { get; }
    public string Name { get; }
    public int? Value { get; }
}
我如何使用:

//...
using(var conn = new SqlConnection(connectionString))
using(var cmd = new SqlCommand("SELECT [ID],[Name],[Value] FROM [Table]", conn))
{
    conn.Open();
    using(var reader = cmd.ExecuteReader())
        return reader.Cast<IDataRecord>()
            .Select(data => new Entity(data))
            .ToArray();
}
/。。。
使用(var conn=newsqlconnection(connectionString))
使用(var cmd=new SqlCommand(“从[Table]”中选择[ID]、[Name]、[Value]),conn)
{
conn.Open();
使用(var reader=cmd.ExecuteReader())
return reader.Cast()
.选择(数据=>新实体(数据))
.ToArray();
}
为了确保它能够正确、安全地使用,这是一个好主意吗


或者可以改进得更好?

我认为不可以。如果要创建其中一个对象,但尚未保存,则没有默认构造函数。因此,任何试图创建实体(或试图创建实体的ORM)的人都无法创建实体,然后设置属性。但也许你没有那样使用它,所以它有点主观。@Nikki9696如果需要使用自定义值创建它,我当然会添加一个无参数或完整属性构造函数。我认为这不是一个问题……只需对属性使用初始化语法,如“新实体{ID=(int)数据[“ID”]、名称…….等etc}”