我可以通过SQLQUERY将存储过程加入结果将结果转换为EF ORM的形式



我需要将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
}

最新更新