使用 ObjectResult 将 EF6 转换为 EF 核心
Convert EF6 to EF core with the ObjectResult
我有一些代码正在尝试转换。我不再有这些 ObjectResult 和 ObjectContext
这是我所拥有的:
public virtual ObjectResult<string> GetTransData(string iN_MEM_ID)
{
var iN_MEM_IDParameter = iN_MEM_ID != null ?
new ObjectParameter("IN_MEM_ID", iN_MEM_ID) :
new ObjectParameter("IN_MEM_ID", typeof(string));
return ((IObjectContextAdapter)this).ObjectContext.ExecuteFunction<string>("GetTransData", iN_MEM_IDParameter);
}
因为我需要从调用者那里 return 编辑列表(它作为 json 数据发回)
这就是我要构建的
public virtual List<string> GetTransData(string iN_MEM_ID)
{
var iN_MEM_IDParameter = iN_MEM_ID != null ?
new SqlParameter("IN_MEM_ID", iN_MEM_ID) :
new SqlParameter("IN_MEM_ID", typeof(string));
Clinical_CaseTrakker_Context clinical = new Clinical_CaseTrakker_Context();
List<string> offLine = clinical.string.FromSql("EXECUTE CT.GetTransData {0}", iN_MEM_IDParameter);
return offLine;
}
请注意,我被 clinical.string
困住了,我不能那样做,但我不确定如何使用 dbcontext 实例和 运行 FromSql 来执行 sql 和 return 列表
您的上下文需要一个 virtual DbSet<string> ResultStrings { get; set; }
,您可以调用它并将结果放入其中。(这不起作用,请参阅下面的 this post 或 Roman Marusyk 评论)
编辑:您的上下文需要一个 virtual DbSet<ResultEntity> ResultEntities { get; set; }
,您可以调用它并将结果放入其中。
然后你可以return clinical.ResultEntities.FromSql("EXECUTE CT.GetTransData {0}", iN_MEM_IDParameter").toList()
来填充集合。
考虑到 ResultEntity
有一个 Id
和一个 value
属性,您可以 ResultEntities.Select(e => e.value).toList()
从集合中提取字符串列表。
在 EF Core 中,无法使用 FromSql
方法直接从数据库 return 属性子集(投影)。
您需要为 class
定义一些模型和 DbSet
public class Foo
{
public string Bar { get; set; }
}
然后在您的上下文中声明
public DbSet<Foo> Foos { get; set; }
并像这样使用它:
using (var context = new Clinical_CaseTrakker_Context())
{
var offLine = context.Foos
.FromSql("EXECUTE CT.GetTransData {0}", iN_MEM_IDParameter)
.Select(x => x.Bar)
.ToList();
return offLine;
}
我有一些代码正在尝试转换。我不再有这些 ObjectResult 和 ObjectContext
这是我所拥有的:
public virtual ObjectResult<string> GetTransData(string iN_MEM_ID)
{
var iN_MEM_IDParameter = iN_MEM_ID != null ?
new ObjectParameter("IN_MEM_ID", iN_MEM_ID) :
new ObjectParameter("IN_MEM_ID", typeof(string));
return ((IObjectContextAdapter)this).ObjectContext.ExecuteFunction<string>("GetTransData", iN_MEM_IDParameter);
}
因为我需要从调用者那里 return 编辑列表(它作为 json 数据发回)
这就是我要构建的
public virtual List<string> GetTransData(string iN_MEM_ID)
{
var iN_MEM_IDParameter = iN_MEM_ID != null ?
new SqlParameter("IN_MEM_ID", iN_MEM_ID) :
new SqlParameter("IN_MEM_ID", typeof(string));
Clinical_CaseTrakker_Context clinical = new Clinical_CaseTrakker_Context();
List<string> offLine = clinical.string.FromSql("EXECUTE CT.GetTransData {0}", iN_MEM_IDParameter);
return offLine;
}
请注意,我被 clinical.string
困住了,我不能那样做,但我不确定如何使用 dbcontext 实例和 运行 FromSql 来执行 sql 和 return 列表
您的上下文需要一个 virtual DbSet<string> ResultStrings { get; set; }
,您可以调用它并将结果放入其中。(这不起作用,请参阅下面的 this post 或 Roman Marusyk 评论)
编辑:您的上下文需要一个 virtual DbSet<ResultEntity> ResultEntities { get; set; }
,您可以调用它并将结果放入其中。
然后你可以return clinical.ResultEntities.FromSql("EXECUTE CT.GetTransData {0}", iN_MEM_IDParameter").toList()
来填充集合。
考虑到 ResultEntity
有一个 Id
和一个 value
属性,您可以 ResultEntities.Select(e => e.value).toList()
从集合中提取字符串列表。
在 EF Core 中,无法使用 FromSql
方法直接从数据库 return 属性子集(投影)。
您需要为 class
DbSet
public class Foo
{
public string Bar { get; set; }
}
然后在您的上下文中声明
public DbSet<Foo> Foos { get; set; }
并像这样使用它:
using (var context = new Clinical_CaseTrakker_Context())
{
var offLine = context.Foos
.FromSql("EXECUTE CT.GetTransData {0}", iN_MEM_IDParameter)
.Select(x => x.Bar)
.ToList();
return offLine;
}