Я нашел несколько других вопросов, связанных с этой темой, но я просто не могу понять его для моей конкретной ситуации. Мне кажется, я уже где-то наткнулся на ответ, но просто не осознал этого. Мне просто нужен толчок в правильном направлении, чтобы закончить это.
Я создаю собственный ASP.NET RoleProvider. Поскольку он наследуется от RoleProvider, я должен переопределить общедоступную строку [] GetAllRoles (). Однако я обнаружил, что string [] недостаточен, поэтому я создал новый класс с именем ProjectRole и заставил GetAllRoles () возвращать List.
Моя причина в том, что моя настраиваемая таблица ролей содержит больше данных, чем просто имена (идентификаторы, имена, описания и т. Д. На нескольких языках, таких как DescriptionE, DescriptionJ и т. Д.), И я хотел бы вместо этого вернуть все о роли просто имени.
Итак, вот и мы (сокращенно для краткости)
public class ProjectRoleProvider : RoleProvider
{
public override string[] GetAllRoles()
{
throw new NotImplementedException();
}
public override List<ProjectRole> GetAllRoles()
{
List<ProjectRole> rolelist = new List<ProjectRole>();
SqlConnection conn = new SqlConnection(connstring);
SqlCommand cmd = new SqlCommand("sprocGetAllRoles", conn);
cmd.CommandType = CommandType.StoredProcedure;
conn.Open();
using (SqlDataReader reader = cmd.ExecuteReader())
{
if (reader.HasRows == true)
{
while (reader.Read())
{
ProjectRole somerole = new ProjectRole();
somerole.ProjectRoleID = reader.GetGuid(reader.GetOrdinal("ProjectRoleID"));
somerole.RoleNameE = reader.GetString(reader.GetOrdinal("RoleNameE"));
somerole.RoleNameJ = reader.GetString(reader.GetOrdinal("RoleNameJ"));
somerole.DescriptionE = reader.GetString(reader.GetOrdinal("DescriptionE"));
somerole.DescriptionJ = reader.GetString(reader.GetOrdinal("DescriptionJ"));
rolelist.Add(somerole);
}
}
reader.Close();
}
conn.Close();
return rolelist;
}
public class ProjectRole
{
private Guid _projectRoleID = Guid.Empty;
private string _roleNameE = String.Empty;
private string _roleNameJ = String.Empty;
private string _descriptionE = String.Empty;
private string _descriptionJ = String.Empty;
//public properties to interact with the private fields
public ProjectRole()
{
}
}
}
Меня беспокоит то, что я могу просто оставить строку [] GetAllRoles () как нереализованную и назвать свой List GetAllRoles () как-нибудь иначе, вроде GetRoles (), и тогда все нормально. Но тогда действительно неясно, когда вы звоните и видите два варианта с Intellisense («какие из них мне использовать?»).Да, я мог бы использовать XML-комментарии и сказать: «Эй, не используйте это, используйте вместо этого GetRoles», но я бы лучше просто переопределил возвращаемый тип и покончил с этим.