Schema specified is not valid. Errors: The relatio

2020-05-24 20:30发布

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?

7条回答
你好瞎i
2楼-- · 2020-05-24 20:31

In my case I had this error because I made another partial class with the same name as the class generated by entity framework. Except mine did not matche the case. For example:

public partial class Vehicle
{
    public string Name { get; set; }
    public string Make { get; set; }
    ...
}

public partial class VEhicle
{
    public override bool Equals(object obj)
    {
       ...
    }
}
查看更多
趁早两清
3楼-- · 2020-05-24 20:32

This is common in self relation entities. in this case:

1-check to have ICollection, List, ... relation collection for each relation.

2-check name of relation collections.

3-in code first, check your EntityTypeConfiguration

查看更多
我命由我不由天
4楼-- · 2020-05-24 20:36

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.

查看更多
戒情不戒烟
5楼-- · 2020-05-24 20:45

I got the same error using database first: "The relationship was not loaded because the type ... is not available". The problem was the model in the solution was outdated. To fix the problem:

  • Double click on edmx file under Solution.
  • Right click on it.
  • Select "Update Model from Database...".
  • Click on the "Refresh" tab.
  • Click on the Finish button.

Your edmx now should be updated with the latest database changes.

查看更多
放荡不羁爱自由
6楼-- · 2020-05-24 20:53

Had this issue. I believe it is something to do with the web service. My solution was after updating the service reference and the config operation took place. the problem went away. hope this helps.

查看更多
爷、活的狠高调
7楼-- · 2020-05-24 20:54

I got one solution here! if you are using EF then do following,

Open model.edmx then right click on it and update model from database. finally build application and run it.

查看更多
登录 后发表回答