Schema specified is not valid. Errors: The relationship was not loaded because the type is not available

asp.net-mvc, c#, entity-framework, fluent, foreign-keys

Solution

The error is a little cryptic, so I'm not sure if this is the reason you're getting that particular error, but I do know it will cause some error, so you can start by fixing this:

What you have is two one-to-many relationships to the same model on one class. That's not a problem per se, but you have to treat them as separate. In other words, they can't both have a opposite relationship of `Orders`, because relationally, there's no way to know which foreign key relationship should populate that list. If you simply change your fluent API definition to something like `.WithMany(t => t.Orders_Shipping)` and `.WithMany(t => t.Orders_Billing)`, I think that will clear up your error.

Problem

I wish to reference the `OrderAddress` model twice in my `Order` model; once as a `ShippingAddress` and once as a `BillingAdress`. On the other side, I want my `OrderAddress` model to have a list of `OrderAddresses`. OrderAddress Model ``` public enum AddressType { Billing, Shipping, Contact } public class OrderAddress : BaseModel { public AddressType AddressType { get; set; } public bool IsPrimary { get; set; } public string Address { get; set; } public string CityStateZip { get; set; } public string ContactName { get; set; } public string PhoneNumber { get; set; } public string FaxNumber { get; set; } public string EmailAddress { get; set; } public virtual ICollection<Order> Orders { get; set; } public virtual ApplicationUser User { get; set; } } ``` Order Model ``` public class Order : BaseModel { public DateTime OrderDate { get; set; } public int BillingAddressId { get; set; } public virtual OrderAddress BillingAddress { get; set; } public int ShippingAddressId { get; set; } public virtual OrderAddress ShippingAddress { get; set; } public virtual ApplicationUser User { get; set; } } ``` Fluent API ``` protected override void OnModelCreating(DbModelBuilder modelBuilder) { base.OnModelCreating(modelBuilder); modelBuilder.Entity<Order>() .HasRequired(m => m.ShippingAddress) .WithMany(t => t.Orders) .HasForeignKey(m => m.ShippingAddressId) .WillCascadeOnDelete(false); modelBuilder.Entity<Order>() .HasRequired(m => m.BillingAddress) .WithMany(t => t.Orders) .HasForeignKey(m => m.BillingAddressId) .WillCascadeOnDelete(false); } ``` When I try to run Update-Database, I get the following error: Schema specified is not valid. Errors: The relationship 'MyApp.Domain.DAL.Order_ShippingAddress' was not loaded because the type 'MyApp.Domain.DAL.OrderAddress' is not available. What am I doing wrong?

Original source

Related problems