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}”