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

Я создаю модель с помощью EF и генерирую ее контекст с помощью генератора DbContext 5.X. Теперь я переименовал имя класса одной из моих сущностей. Теперь, когда я запускаю свой код, я получаю «Тип объекта Student2 не является частью модели для текущего контекста». ошибка.

var context = new MyEntities(connectionString);
foreach(var student in context.Students)
{
    Console.WriteLine(class.Name.ToString());
}

В моем контексте данных.

public partial class MyEntities : DbContext
{
    public MyEntities()
        : base("name=MyEntities")
    {
    }

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        throw new UnintentionalCodeFirstException();
    }

    // public DbSet<Student> Students { get; set; } -> Origional
    public DbSet<Student2> Student { get; set; } // I renamed Student to Student2
}

Как это исправить? Мне нужно переименовать мой класс из-за некоторых конфликтов.


person fhnaseer    schedule 15.04.2013    source источник
comment
Откуда WELL2? Какова структура Student2?   -  person Gert Arnold    schedule 15.04.2013
comment
Поскольку вы, по-видимому, решили свою проблему, не могли бы вы ответить на свой вопрос, рассказав, как вы это сделали, чтобы просветить сообщество?   -  person Gert Arnold    schedule 15.04.2013
comment
@GertArnold WELL2 опечатался. Я добавил ответ на этот вопрос. stackoverflow.com/a/16029086/1077385   -  person fhnaseer    schedule 16.04.2013


Ответы (4)


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

person Slava    schedule 17.12.2013
comment
У меня как раз была эта проблема с небольшим поворотом. В моей ситуации элементы, связанные с EF, находились в отдельном библиотечном проекте. Строка подключения в app.config обновлялась правильно. Однако мне не удалось вручную обновить копию, которая была у меня в файле web.config основного проекта... которая была более старой копией строки подключения с (теперь) неправильными метаданными и т. д. Спасибо! - person TheLostBrain; 18.01.2019

Используйте 1_

Это образец:

Add-Migration "Muster" -ConnectionString "Data Source=.;" -ConnectionProviderName System.Data.SqlClient

и Update-Database, например:

Update-Database -ConnectionString "Data Source=.;" -ConnectionProviderName System.Data.SqlClient

В Visual Studio для этого можно использовать Package Manager Console. В качестве проекта по умолчанию вы должны выбрать свой проект Entity Framework - если у вас их много.

person MikroDel    schedule 15.04.2013
comment
Извините, я не понял, что вы пытаетесь сказать. - person fhnaseer; 15.04.2013
comment
@FaisalHafeez - я обновил свой ответ. Вам теперь ясно? - person MikroDel; 15.04.2013
comment
@FaisalHafeez - в чем проблема с моим ответом? Вы пробовали действие, которое я вам рекомендую? - person MikroDel; 15.04.2013
comment
Термин «Add-Migration» не распознается как имя командлета, функции, файла сценария или исполняемой программы. Проверьте правильность написания имени или, если был указан путь, убедитесь, что путь указан правильно, и повторите попытку. - person fhnaseer; 15.04.2013
comment
@FaisalHafeez - в Visual Studio вы можете использовать для этого консоль диспетчера пакетов. В качестве проекта по умолчанию вы должны выбрать свой проект Entity Framework, если у вас их много. - person MikroDel; 15.04.2013
comment
@MikroDel Сначала речь идет о базе данных, а не о коде, поэтому вы только отвлекаетесь от OP. - person Gert Arnold; 15.04.2013
comment
@FaisalHafeez - я думаю, что с тегом poco вы в первую очередь имеете в виду код. - person MikroDel; 15.04.2013
comment
@FaisalHafeez - наоборот, сначала вы говорите, что база данных - не лучше ли вам изменить ее на стороне базы данных? - person MikroDel; 15.04.2013
comment
Я новичок в Entity Framework. Ну, я отредактировал свой файл edmx и изменил некоторые значения. Теперь он работает нормально. - person fhnaseer; 15.04.2013
comment
@FaisalHafeez - так что отметьте мой пост как ответ и проголосуйте за него, пожалуйста. =) Потому что это обсуждение также является частью ответа. - person MikroDel; 15.04.2013
comment
Хм? Принять, проголосовать? Вы только спутали его. Правильнее всего удалить свой ответ. - person Gert Arnold; 15.04.2013
comment
@GertArnold - у меня есть сообщение - и в обсуждении со мной Фейсал Хафиз получил от меня ответ. Если вы считаете, что мой ответ следует удалить, отметьте его, чтобы удалить. - person MikroDel; 15.04.2013

Ну вот и решение. Откройте пользовательский интерфейс файла Model.edmx и измените имя объекта Student на Student2. Это создаст новые файлы и контекст, в которых Student будет заменен на Student2.

person fhnaseer    schedule 16.04.2013
comment
Вы попросили меня выполнить несколько команд (которые у меня не сработали). И то, что я сделал, отредактировал имя объекта. Ошибка, которую я сделал, заключалась в том, что я изменил имя класса сгенерированных файлов, но не сказал модели использовать новый класс, поэтому он не смог найти новый класс. - person fhnaseer; 16.04.2013

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

Пример модели: myEntity.edmx Пример контроллера:

public class HomeController : Controller
    {
        myEntity db = new myEntity();

        public ActionResult Index()
        {
            return View(db.myTable.ToList());
        }
}

Все остальное находится в модели объекта, поэтому, когда ошибка гласила: «myEntityContext» не является частью модели», это было правдой, потому что я создавал дополнительный класс с именем «myEntityContext» в соответствии с учебниками.

Когда вы пытаетесь создать сильное представление с контекстом, который вы создаете, оно взорвется, потому что попытается связать класс, который не существует в модели. Поэтому, удалив все дополнительные DAL и Model Context, создав новое представление с использованием Entity.context, которое отображается в меню Strong view, все должно работать нормально.

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

person JEuvin    schedule 09.11.2013