this is class library of Microsoft.EntityFramework implementation.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 

150 lines
4.7 KiB

using DotNetNuke.Data;
using ACLib.P2.AppContext;
using System.Data;
using Microsoft.Data.SqlClient;
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.Configuration;
using Core.MSSQL.SqlHelper;
using System.Collections.Generic;
using System.Data.Common;
namespace ACLib.P2.ACPI
{
public class StudentManagerP1 : IDataContext
{
private readonly DatabaseContext _context;
public StudentManagerP1(DatabaseContext databaseContext)
{
_context = databaseContext;
}
private T MapDataToObjectOfType<T>(IDataReader reader)
{
// Implement your mapping logic here based on the reader's columns
// For simplicity, you can use a data mapper library like AutoMapper if needed
// Example: Map columns to properties of T
var result = Activator.CreateInstance<T>();
// Assuming properties of T correspond to columns in the reader
foreach (var property in typeof(T).GetProperties())
{
if (!reader.IsDBNull(reader.GetOrdinal(property.Name)))
{
property.SetValue(result, reader[property.Name]);
}
}
return result;
}
public void BeginTransaction()
{
throw new NotImplementedException();
}
public void Commit()
{
throw new NotImplementedException();
}
public DatabaseContext CreateDbContext()
{
return _context;
}
public void Dispose()
{
_context.Dispose();
}
public void Execute(CommandType type, string sql, params object[] args)
{
throw new NotImplementedException();
}
public IEnumerable<T> ExecuteQuery<T>(CommandType commandType, string commandText, params object[] parameters)
{
using (var connection = _context.Database.GetDbConnection())
{
connection.Open();
// Create a command
using (var command = connection.CreateCommand())
{
command.CommandText = commandText;
command.CommandType = commandType;
if (parameters != null)
{
foreach (DbParameter parameter in parameters)
{
/*
DbParameter param = command.CreateParameter();
param.ParameterName = parameter.ParameterName;
param.Value = parameter.Value;
*/
command.Parameters.Add(parameter);
}
}
// Execute the query
using (var reader = command.ExecuteReader())
{
while (reader.Read())
{
// Map the data to objects of type T
yield return MapDataToObjectOfType<T>(reader);
}
}
}
}
}
public T ExecuteScalar<T>(CommandType type, string sql, params object[] args)
{
throw new NotImplementedException();
}
public T ExecuteSingleOrDefault<T>(CommandType type, string sql, params object[] args)
{
throw new NotImplementedException();
}
public IRepository<T> GetRepository<T>() where T : class
{
throw new NotImplementedException();
}
public void RollbackTransaction()
{
throw new NotImplementedException();
}
public IDataReader ExecuteReader(CommandType commandType, string commandText, params SqlParameter[] parameters)
{
if (string.IsNullOrEmpty(commandText))
{
throw new ArgumentException("Command text cannot be null or empty.", nameof(commandText));
}
var database = _context.Database;
var dbCommand = database.GetDbConnection().CreateCommand();
dbCommand.CommandType = commandType;
dbCommand.CommandText = commandText;
dbCommand.Parameters.AddRange(parameters);
// Open the database connection
if (database.GetDbConnection().State != ConnectionState.Open)
{
database.GetDbConnection().Open();
}
// Execute the command and return the DataReader
return dbCommand.ExecuteReader(CommandBehavior.CloseConnection);
}
}
}