Значение не может быть нулевым. Имя параметра: 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; }
}

и создаются как репозиторий для привязки ninject к

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; }
}

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

image of error

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

Ответы

Ответ 1

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

Я добавил их, и ошибка исчезла

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

Ответ 2

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

Ответ 3

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

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

public HttpPostedFileBase File { get; set; }

который, казалось, нарушил его.

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

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

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

using System.ComponentModel.DataAnnotations.Schema;

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

Ответ 4

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

Это урезанный пример, который будет воспроизводить поведение. Модель - это 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, все снова работало.

Ответ 5

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

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

Ответ 6

Я получил эту ошибку, когда объявил переменную типа 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
}

Ответ 7

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

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

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 с большей вероятностью примет.

Ответ 9

У меня есть некоторые свойства в "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; }
}

Ответ 10

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

public virtual IanaTimeZone Timezone { get; set; }

изо всех сил я набрал это:

public virtual TimeZone Timezone { get; set; }

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