Значение не может быть нулевым. Имя параметра: entitySet

У меня довольно стандартная установка с просто классами POCO

public class Project
{

    public int ProjectId { get; set; }
    public string Name { get; set; }
    public int? ClientId { get; set; }
    public virtual Client Clients { get; set; }
}

Они используют интерфейс

public interface IProjectRepository
{
    IEnumerable<Project> Projects { get; }
}

и построены в качестве хранилища для привязанного к

public class EFProjectRepository : IProjectRepository
{
    private EFDbContext context = new EFDbContext();

    public IEnumerable<Project> Projects
    {
        get { return context.Projects; }
    }
}

Фактический контекст - это просто DbContext

public class EFDbContext : DbContext
{
    public DbSet<Project> Projects { get; set; }
}

Когда я пытаюсь включить код для первой миграции, я получаю следующую ошибку

изображение ошибки

Я сделал этот точный процесс с другими проектами, и там никогда не было ошибки. Это соединение с локальной базой данных Sql Server. Кажется, нет проблемы со строкой подключения. Я искал эту ошибку в Интернете, но решения, кажется, отвечают на вопросы, которые не имеют прямого отношения к моей настройке.

8 ответов

Решение

Эта проблема может возникнуть, если один из классов POCO не был объявлен в DbContext.

Я добавил их, и ошибка ушла

Я изменил имя Task Класс POCO из-за его связи со встроенным именем.NET System.Threading.Tasks, Однако я не изменил это в POCO "TaskTimeLog", где была связь. При прохождении кода свойство "Task" в POCO "TaskTimeLog" не показывало ошибку, потому что теперь оно было присоединено к этому ключевому слову потока, и причина, по которой я сменил имя в первую очередь.

У меня была та же проблема, и причиной был класс POCO, который имел свойство типа Type,

Поздно к игре... но если это поможет...

У меня была такая же проблема, все работало нормально, но эта проблема появилась, я добавил следующее в один из моих классов

public HttpPostedFileBase File { get; set; }

который, казалось, сломал это.

Я гарантировал, что не сопоставил это с базой данных, используя следующее:

[NotMapped]
public HttpPostedFileBase File { get; set; }

Вам необходимо добавить следующее выражение using:

using System.ComponentModel.DataAnnotations.Schema;

Надеюсь это поможет

У меня такая ошибка:

Значение не может быть нулевым. Имя параметра: entitySet

Оказывается, я пытался объединить данные из двух разных DbContexts.

        var roles = await _identityDbContext.Roles
            .AsNoTracking()
            .Take(1000)
            .Join(_configurationDbContext.Clients.ToList(),
                a => a.ClientId,
                b => b.Id,
                (a,b) => new {Role = a, Client = b})
            .OrderBy(x => x.Role.ClientId).ThenBy(x => x.Role.Name)
            .Select(x => new RoleViewModel
            {
                Id = x.Role.Id,
                Name = x.Role.Name,
                ClientId = x.Role.ClientId,
                ClientName = x.Client.ClientName
            })
            .ToListAsync();

Исправление заключается в добавлении ToListкак показано. Тогда соединение будет происходить в коде, а не в базе данных.

Делайте это только в том случае, если у вас все в порядке с получением всей таблицы. (Я знаю, что моя таблица "Клиенты" всегда будет относительно небольшой.)

Для тех, кто не нашел разрешения в других ответах, я получил эту ошибку, когда создал производный класс из класса, у которого был экземпляр в некоторой модели. Исключение произошло при первом использовании моего контекста в запросе.

Это урезанный пример, который будет воспроизводить поведение. Модель - это DbSet в моем контексте.

public class Model
{
    public int Id { get; set; }
    public Duration ExposureDuration { get; set; }
}

public class Duration
{
    public int Value { get; set; }
    public string Unit { get; set; }
}

//Adding this will cause the exception to occur.
public class DurationExtended : Duration
{ }

Это произошло во время незавершенного производства. Когда я изменил свойство модели ExposureDuration на тип DurationExtended, все снова заработало.

У меня была та же проблема, и потребовалось много времени, чтобы найти решение. В нашем случае мы создали отдельный проект для обработки сущностей, и даже если проект по умолчанию в консоли диспетчера пакетов был тем, который обрабатывал сущности, мне нужно установить этот проект в качестве проекта по умолчанию, чтобы он работал.

Я надеюсь, что это поможет кому-то еще.

Для кого-то еще это может быть полезно, у меня было свойство TimeZone (фактический объект.NET TimeZone), и это дало мне ту же ошибку, не знаю почему, но копаю глубже:)

Я столкнулся с этой же проблемой и решил так:

Ошибка в классе модели:

public class UserInformation
{
    public string ID { get; set; }
    public string AccountUserName { get; set; }
    public HttpPostedFileBase ProfilePic { get; set; }
}

Нет ошибок в классе модели

public class UserInformation
{
    public string ID { get; set; }
    public string AccountUserName { get; set; }
    public string ProfilePicName { get; set; }
}

Моя проблема была решена, как только я обновил ProfilePic тип недвижимости от HttpPostedFileBase в string, Если у вас есть свойство, которое не относится к типу string, int, double или некоторый другой базовый / стандартный тип либо заменяет такое свойство, либо обновляет его до типа, который SQL с большей вероятностью примет.

Удалить строку <Generator>EntityModelCodeGenerator</Generator> из вашего файла проекта.

Проверьте это https://www.c-sharpcorner.com/UploadFile/5d065a/poco-classes-in-entity-framework/

У меня есть некоторые свойства в "ExpenseModel", один из которых был...

public virtual Type TypeId {get; set;}

который был причиной вышеупомянутой ошибки из-за свойства "Type" typeType, поэтому я изменил
"Type" => "ExpenseType", и это сработало...:-)

public virtual ExpenseType TypeId {get; set;}

ExpenseModel.cs

public class ExpenseTypes
{
    [Key]
    public int Id { get; set; }
    public string TypeName { get; set; }
    public string Description { get; set; }
}

В моем случае мне пришлось ссылаться на другой класс модели под названием IanaTimeZone, но вместо

public virtual IanaTimeZone Timezone { get; set; }

не торопясь, я набрал это:

public virtual TimeZone Timezone { get; set; }

и он скомпилировался нормально, потому что VS думал, что это System.TimeZone, но EF6 выдавал ошибку. Глупая вещь, но мне потребовалось время, чтобы разобраться, так что, может быть, это кому-то поможет.

Я получил эту ошибку, когда объявил переменную типа Type - вероятно, потому что это сложный тип, не поддерживаемый БД.

Когда я изменил его на строку, ошибка исчезла

public class Sample
{
  public int SampleID {get;set;}
  public Type TypeInfo {get; set;} //This caused the error, 
                                   //because Type is not directly convertible 
                                  //in to a SQL datatype
}
Другие вопросы по тегам