Remplacement pour DataTable/DataSet .NET de Base

basé sur mes recherches, il semble que .net de base ne prend pas en charge DataTable/DataSet. J'ai récemment changé d' .net de base pour le développement d'une nouvelle application, mais il a omis de reconnaître que .net de base ne possède pas de bibliothèque pour les personnes en premier lieu. J'ai utilisé dt/ds pour récupérer les données via une procédure stockée et remplir collection de classes. Mais maintenant, je suis assez perdu avec ce nouveau problème que j'ai trouver de remplacement pour dt/ds. Pour être plus précis, j'ai utilisé pour ce faire:

J'ai une procédure stockée qui prend quatre paramètres d'entrée et retourne un tableau.

ALTER PROCEDURE stp_Student

@Name nvarchar(450), 
@StudentIds tvp_ArrayInt READONLY,  
@StartDate date,
@EndDate date, 

AS

blah blah 

//returns student summary
SELECT  stu.StudentId, 
        stu.StudentName, 
        CASE WHEN (COUNT(DISTINCT course.Id) IS NOT NULL) THEN COUNT(DISTINCT course.Id) ELSE 0 END AS CourseCount, 
        CASE WHEN (SUM(course.TotalCourses) IS NOT NULL) THEN SUM(course.TotalCourses) ELSE 0 END AS TotalCourses, 
        CASE WHEN (SUM(course.Hours) IS NOT NULL) THEN SUM(course.Hours) ELSE 0 END AS Hours
FROM    #TempStudent AS #Temp 

et de créer une classe avec les mêmes champs que j'ai dans ma procédure stockée.

public class StudentModel
{  
    public string StudentId { get; set; }
    public string StudentName { get; set; }
    public int CourseCount { get; set; }
    [Column(TypeName = "Money")]
    public decimal TotalCourses { get; set; }
    public double Hours { get; set; }
}

et extraire les données et le remplissage de la collection de la classe

using (SqlConnection conn = new SqlConnection(connectionString)) 
{
    SqlCommand cmd = new SqlCommand("sp_Student", conn);
    cmd.CommandType = CommandType.StoredProcedure;
    cmd.Parameters.AddWithValue("@Name", name);
    cmd.Parameters.AddWithValue("@StudentIds", studentIds);
    cmd.Parameters.AddWithValue("@StartDate", startDate);
    cmd.Parameters.AddWithValue("@EndDate", endDate);
    conn.Open();

    SqlDataAdapter da = new SqlDataAdapter();
    da.SelectCommand = cmd;
    da.Fill(ds);
    conn.Close();
}

foreach (Datarow row in ds.Tables[0].Rows)
{
    var model = new StudentModel();
    model.StudentId = Convert.ToString(row["StudentId"]);
    //etc..
    studentList.Add(model);
}

Mon mal, je devrais avoir étudié plus avant, j'ai lancé le projet, mais j'ai vraiment besoin de l'aide de quiconque pour trouver de remplacement pour le code ci-dessus. Serait-il possible de l'utiliser .net core FromSql méthode de remplacement? Toute suggestion ou des exemples de codes serait appréciée.

Modifier

Selon Pierre de l'article, trouvé un moyen de mettre en œuvre des ds/dt dans .net version de base, mais d'avoir un peu de problème en passant un tableau int(StudentIds) à ma procédure stockée.

public List<StudentModel> GetStudents(string name, IEnumerable<int> studentIds, DateTime startDate, DateTime endDate)
    {
        List<StudentModel> students = new List<StudentModel>();
        StudentModel = null;

        List<DbParameter> parameterList = new List<DbParameter>();

        parameterList.Add(base.GetParameter("Name", name));
        parameterList.Add(base.GetParameter("StudentIds", studentIds));           
        parameterList.Add(base.GetParameter("StartDate", startDate));
        parameterList.Add(base.GetParameter("EndDate", endDate));       

        using (DbDataReader dataReader = base.ExecuteReader("stp_Student", parameterList, CommandType.StoredProcedure))
        {
            if (dataReader != null)
            {
                while (dataReader.Read())
                {
                    model = new StudentModel();
                    model.StudentId= (int)dataReader["StudentId"];
                    ....

                    students .Add(model);
                }
            }
        }
        return students;
    }
}

Je pense que le problème vient de passer IEnumerable? Comment puis-je passer un tableau int de procédure stockée correctement?

  • Il va venir dans les prochaines versio, voir github.com/dotnet/corefx/pull/12426
  • Aussi, jetez un oeil à social.technet.microsoft.com/wiki/contents/articles/...
  • J'ai aussi ce problème, sauf que ma procédure stockée renvoie un nombre de tables. Donc, dans mon code je viens d'affecter le résultat d'un ensemble de données et l'accès de chaque tableau, à partir de là. Putain de Microsoft est de nouveau en nous forçant à utiliser des demi-produits de boulangerie.
InformationsquelleAutor bbusdriver | 2017-02-18