EF 4.1 Код Первая ошибка - тип объекта SomeType не является частью модели для текущего контекста - PullRequest
42 голосов
/ 12 апреля 2011

При работе с кодом EF сначала я получаю сообщение об ошибке, приведенное ниже в разное время:

Тип сущности SomeType не является частью модели для текущего контекста.

Каковы возможные причины этой ошибки?

Ответы [ 10 ]

40 голосов
/ 12 апреля 2011

Это может произойти из-за того, что:

  • DbContext настроен с неверной строкой соединения
  • Указанный объект фактически не отображается в конфигурации
15 голосов
/ 23 ноября 2012

Я получил это, когда мой класс, унаследованный от DbContext, не объявил модель как свойство. Например, я забыл добавить свойство для FooModel в коде ниже:

public class MyDBContext : DbContext
{
    public DbSet<FooModel> FooModels{ get; set; }

    // etc. ... 
}
5 голосов
/ 24 августа 2012

Это сообщение также появляется, если вы пытаетесь сделать что-то вроде набора EntityState для дочерней коллекции в ассоциации «один ко многим».

Например;если в приведенном ниже фрагменте кода существует связь «один ко многим» между ParentEnt и ChildEnt, сообщение об ошибке:

Тип сущности Hash1Type не является частью модели для текущего контекста.

MyDbContext.Entry(ParentEnt.ChildEnt).State = EntityState.Unchanged;

Следующее изменение не приводит к ошибке:

MyDbContext.Entry(ParentEnd.ChildEnt.First).State = EntityState.Unchanged;

Обратите внимание, что использование First() в этом случае может указывать на t

1 голос
/ 28 января 2015

Это может произойти, если ваша модель не соответствует вашему классу. В моем случае я получил эту ошибку, когда использовал EF Model First и когда обновлял свою модель EDMX из DB, но не обновлял свой класс Entity. В частности, свойство в Entity было в нижнем регистре, в то время как в диаграмме DB и EDMX было в верхнем регистре. Еще одна проблема, с которой я столкнулся, заключалась в том, что свойство модели в диаграмме EDMX не было преобразовано в мое приложение Enum, поэтому EF не могла распознать эту сущность.

1 голос
/ 03 июля 2013

У меня была эта ошибка.

Оказалось, что я добавил новое поле в db View несколько часов назад.Я обновил контекст (как часть чего-то еще, что я делал) и получил эту ошибку.

Когда я обновил POCO, все было хорошо: EF выдал эту ошибку, потому что он не мог сопоставить поле в представлении снедвижимость в POCO Вью.

Не самое полезное сообщение об ошибке в этой ситуации IMO.

1 голос
/ 14 декабря 2012

Это также может быть вызвано свойствами в вашем POCO, которые не называются ТОЧНО, как в EDMX / modelbuilder.Пожалуйста, смотрите мой пост здесь для получения подробной информации о том, как я решил проблему.

Тип сущности не является частью модели для текущего контекста

0 голосов
/ 31 августа 2015

В моем сценарии я использовал EF6 для переноса базы данных MySQL в MSSQL. У меня было 2 отдельные модели и контексты, каждая со своей строкой подключения. Классы имели одно и то же имя, но в MySQL все были в нижнем регистре, а в MSSQL - один регистр Pascal. Я скопировал в обе строки подключения из соответствующих сборок, содержащих мои модели EDMX. Но когда я запустил свое приложение, я получил ошибку об одной из двух строк подключения, уже добавленных в список словарей.

Так что я удалил конфликтующую запись, глупо полагая, что она каким-то образом имеет доступ к строке подключения в собственном файле app.config сборки (уже поздно!). Но нет, ошибка на самом деле происходила, потому что обе строки соединения также имели одинаковое имя - одну в нижнем регистре и одну в регистре Pascal, т. Е. Ключ Dictionary игнорирует этот регистр. Поэтому, когда я удалил MySQL, он попытался использовать строку подключения MSSQL для ОБА моделей. Поэтому мне пришлось заново добавить, переименовать и вручную установить строку подключения для второй модели в коде.

0 голосов
/ 14 августа 2013

Ответ на вопрос: «Каковы возможные причины этой ошибки?»:

1002 * Эта ошибка, кажется, происходит в любое время внутренняя модель / EDMX не будет успешно построен, или не полностью построен.И есть большой потенциал ряд причин для этой проблемы.Очень жаль, что, как представляется, недостаточно сообщений об ошибках или обнаружения ошибок при построении модели, поэтому решение, кажется, привлечь пытается кучу вещей, чтобы увидеть, что делает проблему уйти. 1004 * Я побежал в другой экземплярэта ошибка в течение последних нескольких дней, используя EF 6.0 (в настоящее время пре-релиз кода), кода первой и пользовательские соглашения.Оказывается, что основной причиной является то, что у меня был собственный конвенции, которая переименовывает ID EdmProperty (например, ID -> MyTypeId).Если я отключил мой Таможенной конвенции эта проблема ушла;если я активировал свою конвенцию проблема возникает.Там нет регистрации или исключения или другие ошибки, чтобы указать, что проблема возникла, когда построение модели.Это исключение не поднимет голову, пока я пытаюсь добавить объект к DbSet.Конвенция не вызывает никаких проблем при создании базы данных (через Миграцию).
0 голосов
/ 01 апреля 2013

ОБНОВЛЕНИЕ

Эта ошибка продолжала атаковать меня различными обновлениями, которые я делал в базе данных. В конце концов я удалил файл edmx и просто создал его снова с теми же таблицами и сохраненными процессами.

Старый

Я получил это, когда в сгенерированной сущности отсутствовал обнуляемый столбец:

//------------------------------------------------------------------------------
// <auto-generated>
//    This code was generated from a template.
//
//    Manual changes to this file may cause unexpected behavior in your application.
//    Manual changes to this file will be overwritten if the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------

namespace MyProgram.Models
{
    using System;
    using System.Collections.Generic;

    public partial class Question
    {
        public int id { get; set; }
        public string title { get; set; }
        public string body { get; set; }
        public string tags { get; set; }
        public int votes { get; set; }//I had to manually add this property which is nullable int in the database
    }
}

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

0 голосов
/ 14 апреля 2011

Сначала я делаю базу данных и использую встроенную генерацию шаблонов для своих моделей (EF 4.1)

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

Полагаю, ошибка может указывать на то, что в вашей модели что-то не хватает.

namespace TestApp.BLL
{
    using System;
    using System.Collections.Generic;

    public partial class User
    {
        public User()
        {
            //this.Roles = new HashSet<Role>();
        }

        public int UserId { get; set; }
        public string FirstName { get; set; }
        public string LastName { get; set; }
        public string UserName { get; set; }
        public string Password { get; set; }

        //public virtual ICollection<Role> Roles { get; set; }
    }
}

Приведенный выше код показывает закомментированные свойства навигации. Если я раскомментирую их во всех POCO (это также означает Role POCO), исключение исчезнет.

...