Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

LazyLoading not working #29372

Closed
Luigi6821 opened this issue Oct 17, 2022 · 1 comment
Closed

LazyLoading not working #29372

Luigi6821 opened this issue Oct 17, 2022 · 1 comment

Comments

@Luigi6821
Copy link

Luigi6821 commented Oct 17, 2022

Hi,
I am experiencing issue using LazyLoading proxies in a TPC scenario.
Here below model definition and example code

Model

    public abstract class BaseEntity
    { 
        public decimal DEPTID { get; set; } 
        public DateTime LASTUPDATED { get; set; }
    }
    public abstract class AMOS_ADDRESS : BaseEntity
    {
        public decimal ADDRESSID { get; set; }
        public string CODE { get; set; }
        public string ALPHACODE { get; set; }
        public List<AMOS_ADDRESSCONTACT> CONTACTS { get; set; }
    }
    public abstract class AMOS_ADDRESSCONTACT : BaseEntity
    {
        public decimal ADDRESSCONTACTID { get; set; }
        public virtual AMOS_ADDRESS ADDRESS { get; set; }
        public decimal ADDRESSID { get; set; }
    }
    public class ADDRESS : AMOS_ADDRESS
    { }
    public class ADDRESSCONTACT : AMOS_ADDRESSCONTACT
    { }

Code

        public static void Run()
        {
            var modelBuilder = SqlServerConventionSetBuilder.CreateModelBuilder();//new ModelBuilder();
            modelBuilder.HasDefaultSchema("AMOS");
            modelBuilder.Entity<AMOS_ADDRESS>().UseTpcMappingStrategy();
            modelBuilder.Entity<AMOS_ADDRESS>().HasKey(e => e.ADDRESSID);
            modelBuilder.Entity<AMOS_ADDRESS>().Property(e => e.CODE).HasColumnName("CODE");
            modelBuilder.Entity<AMOS_ADDRESS>().Property(e => e.ALPHACODE).HasColumnName("ALPHACODE");
            modelBuilder.Entity<AMOS_ADDRESS>().Property(e => e.ADDRESSID).HasColumnName("ADDRESSID");
            modelBuilder.Entity<AMOS_ADDRESS>().HasMany(e => e.CONTACTS);
            modelBuilder.Entity<ADDRESS>().ToTable("ADDRESS", "AMOS");
            modelBuilder.Entity<AMOS_ADDRESSCONTACT>().UseTpcMappingStrategy();
            modelBuilder.Entity<AMOS_ADDRESSCONTACT>().HasKey(e => e.ADDRESSCONTACTID);
            modelBuilder.Entity<AMOS_ADDRESSCONTACT>().Property(e => e.ADDRESSCONTACTID).HasColumnName("ADDRESSCONTACTID");
            modelBuilder.Entity<AMOS_ADDRESSCONTACT>().Property(e => e.ADDRESSID).HasColumnName("ADDRESSID");
            modelBuilder.Entity<AMOS_ADDRESSCONTACT>().HasOne(e => e.ADDRESS);
            modelBuilder.Entity<ADDRESSCONTACT>().ToTable("ADDRESSCONTACT", "AMOS");

            SqlConnection connection = new SqlConnection()
            {
                ConnectionString = "User=amos;Password=****;Data source=DevDBMSSQL;Initial catalog=ABS10300DEMO"
            };

            var optionsBuilder = new DbContextOptionsBuilder();
            
            var model = modelBuilder.FinalizeModel();

            optionsBuilder.UseModel(model);
            optionsBuilder.UseLazyLoadingProxies(true);
            connection.Open();

            optionsBuilder.UseSqlServer(connection);
            using (var dbContext = new DbContext(optionsBuilder.Options))
            {
                dbContext.ChangeTracker.LazyLoadingEnabled = true;
                var addressContact = dbContext.Set<AMOS_ADDRESSCONTACT>();
                // The following works
                //var addressContact = dbContext.Set<AMOS_ADDRESSCONTACT>().Include(a => a.ADDRESS);
                foreach (var item in addressContact)
                {
                    // FAILURE ADDRESS = NULL. it works when use .Include
                    Console.WriteLine($"{item.ADDRESS.ALPHACODE}"); 
                }
                Console.ReadKey();
            }
        }

EF Core version:7.0.0-rc.2.22472.11
Database provider: Microsoft.EntityFrameworkCore.SqlServer
Target framework: .NET 6.0
Operating system:
IDE: Visual Studio 2022 17.3.6

Regards
Luigi

@ajcvickers
Copy link
Member

Duplicate of #15532

@ajcvickers ajcvickers marked this as a duplicate of #15532 Oct 17, 2022
@ajcvickers ajcvickers closed this as not planned Won't fix, can't repro, duplicate, stale Oct 19, 2022
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

2 participants