Значение не может быть нулевым. Имя параметра: 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 с большей вероятностью примет.
Ответ 8
Удалите строку <Generator>EntityModelCodeGenerator</Generator>
из файла проекта.
Ознакомьтесь с этим https://www.c-sharpcorner.com/UploadFile/5d065a/poco-classes-in-entity-framework/
![enter image description here]()
Ответ 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 выдавал ошибку. Глупо, но мне понадобилось время, чтобы понять, так что, может быть, это кому-нибудь поможет.