Can someone pls explain why this is happening. I’m trying to get Orders from in memory database but Customer is always null
<code>private async Task<IList<RepositoryOrder>> GetOrdersInternalAsync(int skip, int count)
{
var repositoryOrders = await this.context.Orders
.Include(x => x.Customer)
.Include(x => x.Employee)
.Include(x => x.Shipper)
.Include(x => x.OrderDetails).ThenInclude(x => x.Product)
.Skip(skip)
.Take(count)
.OrderBy(x => x.Id)
.Select(x => OrderMapper.Map(x))
.ToListAsync();
return repositoryOrders;
}
</code>
<code>private async Task<IList<RepositoryOrder>> GetOrdersInternalAsync(int skip, int count)
{
var repositoryOrders = await this.context.Orders
.Include(x => x.Customer)
.Include(x => x.Employee)
.Include(x => x.Shipper)
.Include(x => x.OrderDetails).ThenInclude(x => x.Product)
.Skip(skip)
.Take(count)
.OrderBy(x => x.Id)
.Select(x => OrderMapper.Map(x))
.ToListAsync();
return repositoryOrders;
}
</code>
private async Task<IList<RepositoryOrder>> GetOrdersInternalAsync(int skip, int count)
{
var repositoryOrders = await this.context.Orders
.Include(x => x.Customer)
.Include(x => x.Employee)
.Include(x => x.Shipper)
.Include(x => x.OrderDetails).ThenInclude(x => x.Product)
.Skip(skip)
.Take(count)
.OrderBy(x => x.Id)
.Select(x => OrderMapper.Map(x))
.ToListAsync();
return repositoryOrders;
}
This is Order model:
<code>public class Order
{
public Order(long id, Customer customer, // other properties)
{
}
private Order()
{
}
public long Id { get; }
public virtual Customer Customer { get; set; } = null!;
// other properties
}
</code>
<code>public class Order
{
public Order(long id, Customer customer, // other properties)
{
}
private Order()
{
}
public long Id { get; }
public virtual Customer Customer { get; set; } = null!;
// other properties
}
</code>
public class Order
{
public Order(long id, Customer customer, // other properties)
{
}
private Order()
{
}
public long Id { get; }
public virtual Customer Customer { get; set; } = null!;
// other properties
}
And this is Customer model:
<code>public class Customer
{
public Customer(CustomerCode code, string companyName)
{
this.CustomerCode = code;
this.CompanyName = companyName;
}
private Customer()
{
}
public CustomerCode CustomerCode { get; }
public string CompanyName { get; }
}
public class CustomerCode
{
public CustomerCode(string code)
{
this.Code = code;
}
public string Code { get; init; }
}
</code>
<code>public class Customer
{
public Customer(CustomerCode code, string companyName)
{
this.CustomerCode = code;
this.CompanyName = companyName;
}
private Customer()
{
}
public CustomerCode CustomerCode { get; }
public string CompanyName { get; }
}
public class CustomerCode
{
public CustomerCode(string code)
{
this.Code = code;
}
public string Code { get; init; }
}
</code>
public class Customer
{
public Customer(CustomerCode code, string companyName)
{
this.CustomerCode = code;
this.CompanyName = companyName;
}
private Customer()
{
}
public CustomerCode CustomerCode { get; }
public string CompanyName { get; }
}
public class CustomerCode
{
public CustomerCode(string code)
{
this.Code = code;
}
public string Code { get; init; }
}
This is how i configured relationship:
<code>modelBuilder.Entity<Customer>(opt =>
{
opt.ToTable("Customers");
opt.Property(x => x.CustomerCode)
.HasConversion(x => x.Code, y => new CustomerCode(y))
.HasColumnName("CustomerID")
.IsRequired();
opt.HasKey(x => x.CustomerCode);
opt.Property(x => x.CompanyName).HasMaxLength(255);
});
modelBuilder.Entity<Order>(opt =>
{
opt.ToTable("Orders");
opt.HasKey(x => x.Id).HasName("OrderID");
opt.Property(x => x.Id).HasColumnName("OrderID");
opt.HasOne(x => x.Customer).WithMany().HasForeignKey("CustomerID");
// other unrelated properties
</code>
<code>modelBuilder.Entity<Customer>(opt =>
{
opt.ToTable("Customers");
opt.Property(x => x.CustomerCode)
.HasConversion(x => x.Code, y => new CustomerCode(y))
.HasColumnName("CustomerID")
.IsRequired();
opt.HasKey(x => x.CustomerCode);
opt.Property(x => x.CompanyName).HasMaxLength(255);
});
modelBuilder.Entity<Order>(opt =>
{
opt.ToTable("Orders");
opt.HasKey(x => x.Id).HasName("OrderID");
opt.Property(x => x.Id).HasColumnName("OrderID");
opt.HasOne(x => x.Customer).WithMany().HasForeignKey("CustomerID");
// other unrelated properties
</code>
modelBuilder.Entity<Customer>(opt =>
{
opt.ToTable("Customers");
opt.Property(x => x.CustomerCode)
.HasConversion(x => x.Code, y => new CustomerCode(y))
.HasColumnName("CustomerID")
.IsRequired();
opt.HasKey(x => x.CustomerCode);
opt.Property(x => x.CompanyName).HasMaxLength(255);
});
modelBuilder.Entity<Order>(opt =>
{
opt.ToTable("Orders");
opt.HasKey(x => x.Id).HasName("OrderID");
opt.Property(x => x.Id).HasColumnName("OrderID");
opt.HasOne(x => x.Customer).WithMany().HasForeignKey("CustomerID");
// other unrelated properties
It seems it correctly queries and selects c.CustomerID (which is CustomerCode in my code) and c.CompanyName but fails to map it:
<code>public static RepositoryOrder Map(Order order)
{
var repositoryOrder = new RepositoryOrder(order.Id)
{
Customer = new RepositoryCustomer(new RepositoryCustomerCode(order.Customer.CustomerCode.Code)) // this is null here and throwing exception
{
CompanyName = order.Customer.CompanyName,
},
</code>
<code>public static RepositoryOrder Map(Order order)
{
var repositoryOrder = new RepositoryOrder(order.Id)
{
Customer = new RepositoryCustomer(new RepositoryCustomerCode(order.Customer.CustomerCode.Code)) // this is null here and throwing exception
{
CompanyName = order.Customer.CompanyName,
},
</code>
public static RepositoryOrder Map(Order order)
{
var repositoryOrder = new RepositoryOrder(order.Id)
{
Customer = new RepositoryCustomer(new RepositoryCustomerCode(order.Customer.CustomerCode.Code)) // this is null here and throwing exception
{
CompanyName = order.Customer.CompanyName,
},
Customer must be not null and in database there is no Order that has null CustomerID