#entity-framework #.net-core-3.1
Вопрос:
Я учусь использовать .net core 3 и EF5 в небольшом проекте api. В настоящее время я не могу запросить сущность, получить отношения к этой сущности (2-й уровень), но избегать получения отношений для отношений (3-й уровень). Как я могу сказать EF5, чтобы он ничего не увлажнял после 2-го уровня ?
Вот (я думаю) важные части кода:
//this is the current database query. I did change it more times than I //can count in both hands, trying to make it work the way I want. //Not proud of getting the associations in a second line of code, instead //of performing a single query Listlt;UserProfilegt; upl = _myCtx.UserProfile .Where(up =gt; up.User.Cpf == cpf) .Include("CrpUg") .ToList(); crpUgList.AddRange(upl.Select(up =gt; up.CrpUg));
Моя учетная запись пользователя:
public partial class UserProfile { public decimal Id { get; set; } public string? Perfil { get; set; } public decimal IdUser { get; set; } public decimal IdProfile { get; set; } public decimal IdCrpUg { get; set; } public virtual User User { get; set; } public virtual Profile Profile{ get; set; } public virtual CrpUg CrpUnidadeGestora { get; set; } public override string ToString() { return JsonConvert.SerializeObject(this); } }
Моя сущность CrpUg:
public partial class CrpUg { public decimal Id { get; set; } public int Versao { get; set; } public DateTime DataUltAlteracao { get; set; } public string NmNome { get; set; } public virtual ICollectionlt;UserProfilegt; UserProfiles { get; set; } }
Теперь мой контекстный файл:
public partial class MyContext : DbContext { public virtual DbSetlt;CrpUggt; CrpUg { get; set; } public virtual DbSetlt;UserProfilegt; UserProfile{ get; set; } protected override void OnModelCreating(ModelBuilder modelBuilder) { //... modelBuilder.Entitylt;CrpUggt;(entity =gt; { entity.ToTable("CRP_UG"); entity.HasKey(e =gt; e.Id) .HasName("PK__CRP_UG"); entity.Property(e =gt; e.Id) .HasColumnName("ID") .HasColumnType("numeric(19, 0)") .ValueGeneratedOnAdd(); entity.Property(e =gt; e.DataUltAlteracao) .HasColumnName("DATA_ULT_ALTERACAO") .HasColumnType("datetime"); entity.Property(e =gt; e.NmNome) .IsRequired() .HasColumnName("NM_NOME") .HasMaxLength(100) .IsUnicode(false); entity.Property(e =gt; e.Versao).HasColumnName("VERSAO"); }); modelBuilder.Entitylt;UserProfilegt;(entity =gt; { entity.HasKey(e =gt; e.Id); entity.ToTable("USER_PROFILE"); entity.Property(e =gt; e.Id) .HasColumnType("numeric(19, 0)") .ValueGeneratedOnAdd() .HasColumnName("ID_USER_PROFILE") .HasAnnotation("Relational:ColumnType", "numeric(19, 0)"); entity.Property(e =gt; e.IdUSER) .HasColumnType("numeric(19, 0)") .HasColumnName("ID_USER") .HasAnnotation("Relational:ColumnType", "numeric(19, 0)"); entity.Property(e =gt; e.IdProfile) .HasColumnType("numeric(19, 0)") .HasColumnName("ID_PROFILE") .HasAnnotation("Relational:ColumnType", "numeric(19, 0)"); entity.Property(e =gt; e.IdCrpUg) .HasColumnType("numeric(19, 0)") .HasColumnName("ID_UG") .HasAnnotation("Relational:ColumnType", "numeric(19, 0)"); entity.Property(e =gt; e.Perfil) .HasMaxLength(5) .IsUnicode(false) .HasColumnName("PERFIL"); entity.HasOne(d =gt; d.User) .WithMany(p =gt; p.UserProfiles) .HasForeignKey(d =gt; d.IdUser) .OnDelete(DeleteBehavior.NoAction) .HasConstraintName("FK_USER_USER_PROFILE"); entity.HasOne(d =gt; d.Profile) .WithMany(p =gt; p.UserProfiles) .HasForeignKey(d =gt; d.IdProfile) .OnDelete(DeleteBehavior.NoAction) .HasConstraintName("FK_PROFILE_USER_PROFILE"); entity.HasOne(d =gt; d.CrpUg) .WithMany(p =gt; p.UserProfiles) .HasForeignKey(d =gt; d.IdCrpUg) .OnDelete(DeleteBehavior.NoAction) .HasConstraintName("FK_UG_USER_PROFILE"); }); } }
Когда я вызываю эту операцию, я получаю CrpUg
массив, но это тоже чайлдс UserProfiles
. Я хотел бы получить CrpUG
список без этих детей. Как я могу выполнить этот запрос?
PS.: Мне пришлось переименовать столбцы и имена таблиц из-за характера проекта. Пожалуйста, скажите мне, если что-то не имеет смысла или если этого не хватает.