【发布时间】:2019-08-11 12:12:06
【问题描述】:
我有以下接口和类
public interface IOwner
{
int Owner_pkid { get; set; }
string Name { get; set; }
}
public class Owner : IOwner
{
public Owner()
{
}
public int Owner_pkid { get; set; }
public string Name { get; set; }
}
然后我在一个单独的类中有以下数据访问方法
public List<IOwner> GetAllOwners()
{
var sql = "SELECT owner_pkid, name from dbo.Owners ";
using (SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["DefaultConnection"].ConnectionString))
using (SqlCommand cmd = new SqlCommand(sql, conn))
{
cmd.CommandType = CommandType.Text;
List<IOwner> owners = new List<IOwner>();
conn.Open();
using (SqlDataReader reader = cmd.ExecuteReader())
BindResultSet<IOwner>(reader, owners);
return owners;
}
}
private void BindResultSet<T>(SqlDataReader reader, List<T> items) where T : new()
{
int counter = 0;
if (!reader.IsClosed)
{
while (reader.Read())
{
T record = GetNextDataObject<T>(items, counter);
counter++;
BindRecord<T>(reader, record);
}
}
}
private T GetNextDataObject<T>(List<T> items, int pointer) where T : new()
{
if (pointer < items.Count)
{
return items[pointer];
}
else
{
items.Add(new T());
return items[items.Count - 1];
}
}
private void BindRecord<IOwner>(SqlDataReader reader, IOwner owner)
{
owner.Name = (string)reader["name"];
owner.Owner_pkid = (int)reader["owner_pkid"];
}
我在这段代码中遇到了 2 个单独的错误:
- 在 GetAllOwners 方法中,我在调用 BindResultSet 时遇到错误
IOwner 必须是具有无参数构造函数的非抽象类型才能在此处使用
我在实现类上有一个无参数的构造函数 - 不要认为我可以在接口中添加一个
- 在最终的 BindRecord 方法中,我收到一个错误,即无法识别两个属性名称。这可能是第一个问题的结果
【问题讨论】:
-
您是否有多个继承自 IOwner 接口的类?我假设 BindResultSet 和 GetNextDataObject 可以与多个接口一起使用? (IFoo, IBar, ...)