我需要将SQL存储过程的结果转换为EF ORM。
存储过程包含这样的查询:
select *
from TbA
join TbB on TbA.aId = TbB.aId`
它有效,但是在ORM模式下,TBB的内容没有出现在返回的对象中。我必须将此查询用作项目中的存储过程。
c#代码:
var result = dbContext.Database.SqlQuery<TbA>("sp_1");
EF实体类:
[Table("TbA")]
public partial class TbA
{
public TbA()
{
TbB = new HashSet<TbB>();
}
[Key]
public long aId { get; set; }
[StringLength(10)]
public string rNo { get; set; }
public virtual ICollection<TbB> TbB { get; set; }
}
public partial class TbB
{
[Key]
public long rowId { get; set; }
public long aId { get; set; }
[StringLength(10)]
public string kKey { get; set; }
public virtual TbA TbA { get; set; }
}
我想您可以使用这两个选项中的任何一个
first ,创建一个包含TBA和TBB属性的类,因为您使用的是加入。该类将包含您要返回的属性。
第二使用Linq查询示例。
var queryResult = from tba in dbContext.TbA
join tbb in database.TbB on tba.aId equals tbb.aId
select new {
//construct your class here as dynamic objects
TbA.attr1 = tba.attr1,
Tbb.attr1 = tbb.attr1
// and so on
}
queryResult
将假设选择语句中选择的任何类。
另外,如果要使用与选项1创建的类,则查询的选择部分更改为
select new TbAandTbB{
attr1 = tba.attr1,
attr2 = tbb.attr1
// and so on
}