Vic*_*tro 0 sql-server asp.net entity-framework asp.net-core
今天,我有一个使用 EF Core 和 DbContext 类工作的应用程序,如下所示:
public class RcoreContext : DbContext
{
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
optionsBuilder.UseSqlServer(@"Server=(localdb)\mssqllocaldb;Database=rCoreData.TestDb;Trusted_Connection=True;");
}
public DbSet<Hosts> Hosts { get; set; }
public DbSet<Route> Route { get; set; }
}
public class Hosts
{
public int HostsId { get; set; }
public string Host { get; set; }
[NotMapped]
public Dictionary<object, object> Datas { get; set; }
public string DatasJson { get { return JsonConvert.SerializeObject(Datas); } set { Datas = JsonConvert.DeserializeObject<Dictionary<object, object>>(value); } }
}
public class Route
{
public int RouteId { get; set; }
public int HostId { get; set; }
public string RealRoute { get; set; }
public string alias { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
我非常喜欢这种方式,因为请求返回基于现有类(Hosts以及Route在此代码中)。
SqlCommand 方式似乎更易于使用(它似乎更像 PHP),但似乎将条目返回为object. (我读过这篇文章)
我想知道是否有可能在这两种方式之间进行混合,并像 SqlCommand 一样将请求作为 StoredProcedure 发送,但仍然基于请求返回的现有类。
谢谢
如果你想在 EF 中使用 ADO.NET,你只需要获取当前的连接字符串并创建 sqlcommand 如下:
using (var context = new RcoreContext())
{
// creates a Command
var command = context.Database.Connection.CreateCommand();
command.CommandType = commandType;
command.CommandText = sql;
using (SqlDataReader reader = command.ExecuteReader())
{
while (reader.Read())
{
for (int i = 0; i < reader.FieldCount; i++)
{
Console.WriteLine(reader.GetValue(i));
}
Console.WriteLine();
}
}
}
Run Code Online (Sandbox Code Playgroud)
如果你只是想执行 sql 或存储过程,你也可以在 EF 中使用下面
_dbContext.Database.ExecuteSqlCommand(sql, parameters);
_dbContext.Database.SqlQuery<TEntity>(sql, parameters);
Run Code Online (Sandbox Code Playgroud)