Указанная схема недействительна. Ошибки: отношение «EntityA_EntityBs» не было загружено, потому что тип «EntityB» недоступен

.net entity-framework entity-framework-6

Вопрос

Задний план

Я работаю над приложением, которое использует Entity Framework для запроса базы данных из стороннего приложения. База данных содержит большое количество таблиц и внешних ключей. Я сопоставил соответствующие таблицы с объектами, использующими API-интерфейс Entity Framework Fluent.

юридические лица

namespace App.Entities
{
    public class Ticket
    {
        public int Id { get; set; }

        public virtual SalesOrder SalesOrder { get; set; }
        public int SalesOrderId { get; set; }
    }

    public class SalesOrder
    {
        public int Id { get; set; }

        public virtual ICollection<Ticket> Tickets { get; set; }
        public virtual ICollection<Ticket> Lines { get; set; }
    }
}

Отображения

Обратите внимание, что сопоставления имен столбцов и таблиц опущены, так как я не думаю, что они релевантны.

namespace App.Mappings
{
    public class TicketMap : EntityTypeConfiguration<Ticket>
    {
        public TicketMap() {}
    }

    public class SalesOrderMap : EntityTypeConfiguration<SalesOrder>
    {
        public SalesOrderMap()
        {
            HasMany(t => t.Tickets)
                .WithRequired(t => t.SalesOrder)
                .HasForeignKey(t => t.SalesOrderId);

            HasMany(t => t.Lines)
                .WithRequired(t => t.SalesOrder)
                .HasForeignKey(t => t.SalesOrderId);
        }
    }
}

Объекты и их сопоставления правильно зарегистрированы в Entity Framework.

проблема

Когда я пытаюсь запустить запрос, я получаю следующее MetadataException :

Указанная схема недействительна. Ошибки: отношение «App.SalesOrder_Tickets» не было загружено, потому что тип «App.Ticket» недоступен.

Обратите внимание, что пространство имен Ticket указанное в приведенном выше сообщении, неверно. Класс сущности фактически находится в App.Entities.Ticket . Однако я не знаю, связано ли это с проблемой или нет.

Что я пробовал

  1. Проверка правильности настройки отношения
  2. Проверка дубликатов классов в модели, как это предлагается в этом комментарии
  3. Проверка того, что объекты находятся в том же пространстве имен, что и в этом ответе

Принятый ответ

Проблема заключалась в том, что эта пара строк:

public virtual ICollection<Ticket> Tickets { get; set; }
public virtual ICollection<Ticket> Lines { get; set; }

Тип элемента второй коллекции должен был отличаться от типа элемента первого:

public virtual ICollection<TicketLine> Lines { get; set; }

Изменение этого исправлено.


Популярные ответы

У меня было такое же сообщение об ошибке, и проблема для меня состояла в том, что у меня было две разные модели edmx с объектами с тем же именем. Я думаю, что EF не мог загрузить некоторые из связанных объектов и выдавал сообщение.

Я решил удалить объекты из одной модели (изменение имени будет работать, как я полагаю) и перестроить решение.



Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow
Является ли этот КБ законным? Да, узнайте, почему
Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow
Является ли этот КБ законным? Да, узнайте, почему