Отключите отложенную загрузку EF6 DBFirst в .NET Framework - PullRequest
0 голосов
/ 25 января 2019

В своем приложении webapi2 я использовал db первого поколения и создал частичный класс контекста, чтобы установить для ProxyCreationEnabled и LazyLoadingEnabled значение false.

Но когда я использую db.ExameViaAereaOssea.Where(e => e.ConsultaId == model.ConsultaId).ToList(), также загружается свойство отношения Consulta.

Это не происходит, когда я использую db.ExameViaAereaOssea.AsNoTracking().Where(e => e.ConsultaId == consultaId).ToList()

Я не хочу использовать AsNoTracking для каждого запроса

Вот мои два класса

public partial class ExameViaAereaOssea
{
    [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2214:DoNotCallOverridableMethodsInConstructors")]
    public ExameViaAereaOssea()
    {

    }

    public int ExameViaAereaOsseaId { get; set; }
    public Nullable<int> ConsultaId { get; set; }
    public string VAOE125 { get; set; }
    public string VAOE250 { get; set; }
    public string VAOE500 { get; set; }
    public string VAOE750 { get; set; }
    public string VAOE1000 { get; set; }
    public string VAOE1500 { get; set; }
    public string VAOE2000 { get; set; }
    public string VAOE3000 { get; set; }
    public string VAOE4000 { get; set; }
    public string VAOE6000 { get; set; }
    public string VAOE8000 { get; set; }
    public string VOOE500 { get; set; }
    public string VOOE750 { get; set; }
    public string VOOE1000 { get; set; }
    public string VOOE2000 { get; set; }
    public string VOOE3000 { get; set; }
    public string VOOE4000 { get; set; }
    public string TipoAudiometria { get; set; }

    public virtual Consulta Consulta { get; set; }
}

public partial class Consulta
{
    [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2214:DoNotCallOverridableMethodsInConstructors")]
    public Consulta()
    {
        this.ExameViaAereaOssea = new HashSet<ExameViaAereaOssea>();
    }

    public int ConsultaId { get; set; }
    public DateTime? Data {get;set;} 
    public Nullable<int> PacienteId { get; set; }
    public Nullable<int> TipoConsultaId { get; set; }
    public Nullable<int> PacienteDadosProfissionaisId { get; set; }
    public Nullable<int> ClienteId { get; set; }

    [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")]
    public virtual ICollection<ExameViaAereaOssea> ExameViaAereaOssea { get; set; }
}

А вот и использование.

public class RegraConsulta(){
    public ExamesConsulta BuscaExamesConsulta(Consulta model) {
        using (var db = new winmedEntities(false))
        {
            var retorno = new ExamesConsulta();
            retorno.DataConsulta = RetornaDataConsulta(db, model.ConsultaId);
            retorno.exAereaOssea = db.ExameViaAereaOssea.Where(c => c.ConsultaId == model.ConsultaId).ToList();

            return retorno;
        }
    }

    public DateTime RetornaDataConsulta(winmedEntities db, int consultaId)
    {
        var consulta = db.Consulta.Find(consultaId);

        if (consulta == null)
            throw new RegraNegocioException("Consulta não encontrada");

        return consulta.Data.Value;
    }
}

Возврат используется в Web Api Controller, а метод возврата используется как return Ok(new RegraConsulta().BuscaExamesConsulta(new Consulta { ConsultaId = 1 }));

...