带有用于测试的 Sqlite 内存数据库的 EF Core 抛出 "Collection is read-only" 错误 - 为什么?

EF Core with Sqlite Memory Database for testing throws "Collection is read-only" error - why?

我正在使用 sqlite 内存数据库编写与 ef core 的集成测试。这是代码:

        public async Task GetCustomerAndRidesById_When_MultipleCustomersArePresent()
        {
            var connectionStringBuilder =
                new SqliteConnectionStringBuilder { DataSource = ":memory:" };
            var connection = new SqliteConnection(connectionStringBuilder.ToString());

            var options = new DbContextOptionsBuilder<TravelContext>()
                .UseSqlite(connection)
                .Options;

            var customer = _customerBuilder.WithDefaults();
            Customer customerFromRepo;

            using (var context = new TravelContext(options))
            {
                context.Database.OpenConnection();
                context.Database.EnsureCreated();

                await context.Customers.AddAsync(customer);

                await context.SaveChangesAsync();

                _output.WriteLine($"Customer ID: {customer.Id}");

                //var customerRepository = new CustomerRepository(context);
                //customerFromRepo = await customerRepository.GetByIdWithRidesAsync(customer.Id);
            }

            using (var context = new TravelContext(options))
            {
                var customerRepository = new CustomerRepository(context);
                try
                {
                    customerFromRepo = await customerRepository.GetByIdWithRidesAsync(customer.Id);
                }
                catch (System.Exception e)
                {
                    throw;
                }
            }

            customerFromRepo.Should().BeEquivalentTo(customer);
            customerFromRepo.Rides.Should().HaveCount(customer.Rides.Count);
        }

以上代码抛出以下错误

Collection is read-only

错误。但是,如果我注释掉第二个 using 块并取消注释第一个 using 块内的行,则会检索记录并通过测试。

这是我的 Customer class:

    public class Customer : BaseEntity<Guid>, IAggregateRoot
    {
        private Customer()
        {
            // required by EF
        }

        public Customer(string name, List<Ride> rides)
        {
            Name = name;
            _rides = rides;
        }

        public string Name { get; set; }
        private readonly List<Ride> _rides = new List<Ride>();
        public IReadOnlyCollection<Ride> Rides => _rides.AsReadOnly();
    }

我很困惑。谁能解释一下为什么?

谢谢

启用以下配置可解决此问题。

var navigation = builder.Metadata.FindNavigation(nameof(Customer.Rides));
navigation.SetPropertyAccessMode(PropertyAccessMode.Field);

鸣谢并感谢 Ivan Stoev 的指导。