Ersatz für DataTable/DataSet in .NET Core

basierend auf meiner Forschung, es scheint, wie .net core wird nicht unterstützt DataTable/DataSet. Ich habe vor kurzem verschoben .net-Kern für eine neue Anwendung entwickeln, aber nicht zu erkennen .net core wird nicht aus der Bibliothek für diejenigen, die in den ersten Platz. Ich verwendet, um zu verwenden dt/ds für das abrufen der Daten über die gespeicherte Prozedur aus, und füllen Sammlung von Klassen. Aber jetzt bin ich ganz verloren mit diesem neuen problem, dass ich habe, finden Sie Ersatz für dt/ds. Um genauer zu sein, die ich verwendet, um dies zu tun:

Ich habe eine gespeicherte Prozedur, die dauert vier Eingabeparameter und gibt eine Tabelle.

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 

und erstellen Sie eine Klasse mit gleichen Felder wie ich in meinen gespeicherten Prozedur.

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

und abrufen von Daten und füllen Sammlung von Klasse

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);
}

Mir schlecht, ich sollte noch mehr geforscht, bevor ich das Projekt initiiert, aber ich brauche wirklich jemanden um Hilfe zu finden, Ersatz für den obigen code. Würde es sein möglich zu verwenden .net core ist FromSql Methode als Ersatz? Jede Anregung oder Beispiel-codes wäre sehr hilfreich.

Bearbeiten

Laut Peter ' s-Artikel, einen Weg gefunden zu implementieren ds/dt .net-core-version, aber mit ein bisschen problem mit der übergabe eines int-Arrays(StudentIds) zu meinen gespeicherten Prozedur.

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

Ich denke, das problem kommt von der Weitergabe IEnumerable? Wie kann ich die übergabe eines int-Arrays, um die gespeicherte Prozedur richtig?

Wird es in der nächsten versio finden Sie unter github.com/dotnet/corefx/pull/12426
Werfen Sie auch einen Blick auf social.technet.microsoft.com/wiki/contents/articles/...
Ich habe auch dieses problem, außer, dass meine gespeicherte Prozedur gibt eine Reihe von Tabellen. Also in meinem code, den ich nur ordnen Sie das Ergebnis in einem Dataset und den Zugriff auf die einzelnen Tabelle aus. Verdammt Microsoft ist wieder die uns zwingt, die Hälfte der Backwaren.

InformationsquelleAutor bbusdriver | 2017-02-18

Schreibe einen Kommentar