Могу ли я преобразовать результат соединения хранимой процедуры с помощью SQLQuery в форму EF ORM? - PullRequest
0 голосов
/ 07 июля 2019

Мне нужно преобразовать результат хранимой процедуры 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; }
}

1 Ответ

0 голосов
/ 08 июля 2019

Я думаю, вы можете пойти с любым из этих двух вариантов

Первый , создайте класс, который содержит оба атрибута из 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
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...