Intereting Posts
исключение null reference с предложением linq .where Создание выражения Лямбда с 3 условиями Явное разрешение ILog в Autofac при использовании с модулем вставки в журнал Как я могу перечислить все управляемые streamи в C #? Дуплексная связь с использованием NetTcpBinding – несоответствие ContractFilter? Как я могу заставить этот метод поиска LINQ обрабатывать более двух терминов? C # Как нажать кнопку, нажав Enter, в то время как текстовое поле имеет фокус? C # Служба Windows создает процесс, но не выполняет его Почему EF возвращает прокси-class вместо фактического объекта? Самый быстрый способ преобразования списка объектов в csv с каждым значением объекта в новой строке Чтение / запись из / в иерархическое хранилище объектов – SharePoint 2007 Объединить словарь с помощью метода Enumerable.Union Как вставить таблицу в документ PDF с помощью iTextSharp? Как сделать MarkupExtenstion для события нажатия кнопки в WPF 4.5? Почему в Roslyn асинхронные classы состояний (а не структуры)?

Исключение Entity Framework: недопустимое имя объекта

Я пытаюсь создать базу данных с использованием подхода Code First. Когда я запускаю следующий код, я получаю следующее исключение. Что-то не так в полях, которые я определил? Как мы можем это преодолеть?

Исключение :

При обновлении записей произошла ошибка. Подробнее см. Внутреннее исключение.

Внутреннее исключение :

Msgstr “Недопустимое имя объекта ‘dbo.Dinners’.

Примечание . У меня нет такой таблицы (Dinners) в базе данных. Код должен создавать таблицы. Я просто дал строку подключения для идентификации сервера, как указано в EF Code First: Не удается подключиться к SQL Server . Должен ли я изменить строку подключения?

Соединения Строка:

string connectionstring = “Data Source =; Initial Catalog = LibraryReservationSystem; Integrated Security = True; Время ожидания подключения = 30”;

База данных LibraryReservationSystem – это уже существующая firebase database. В нем нет таблиц. Я ожидаю, что EF создаст таблицы.

Строка подключения, которую я скопировал из рабочего приложения LINQ 2 SQL. Нужно ли мне вносить какие-либо изменения в EF?

введите описание изображения здесь

ОБНОВИТЬ

Когда я включил следующий код, исключение изменилось. Теперь он говорит – «Недопустимое имя объекта« dbo.Dinner ».». Сейчас он жалуется на обеденный стол; а не обеденный стол.

protected override void OnModelCreating(DbModelBuilder modelbuilder) { modelbuilder.Conventions.Remove(); } 

Оригинальный КОД

  static void Main(string[] args) { string connectionstring = "Data Source=.;Initial Catalog=LibraryReservationSystem;Integrated Security=True;Connect Timeout=30"; using (var db = new NerdDinners(connectionstring)) { var product = new Dinner { DinnerID = 1, Title = 101 }; db.Dinners.Add(product); int recordsAffected = db.SaveChanges(); } } using System.Data.Entity; namespace LijosEF { public class Dinner { public int DinnerID { get; set; } public int Title { get; set; } } public class RSVP { public int RSVPID { get; set; } public int DinnerID { get; set; } public virtual Dinner Dinner { get; set; } } //System.Data.Entity.DbContext is from EntityFramework.dll public class NerdDinners : System.Data.Entity.DbContext { public NerdDinners(string connString): base(connString) { } public DbSet Dinners { get; set; } public DbSet RSVPs { get; set; } } } 

ССЫЛКА

  1. http://nerddinner.codeplex.com/discussions/358197
  2. Entity framework – недопустимое имя объекта
  3. Недопустимое имя объекта «dbo.TableName» при извлечении данных из сгенерированной таблицы
  4. http://blogs.msdn.com/b/adonet/archive/2011/09/28/ef-4-2-code-first-walkthrough.aspx

База данных LibraryReservationSystem – это уже существующая firebase database. В нем нет таблиц. Я ожидаю, что EF создаст таблицы.

Это неправильно. Если firebase database существует, EF не создает никаких таблиц в этой базе данных. EF может создать базу данных, если она не существует. Это инициализатор базы данных по умолчанию CreateDatabaseIfNotExists который применяется, если вы не меняете его явно. Вы можете выбрать два других инициализатора: DropCreateDatabaseAlways или DropCreateDatabaseIfModelChanges . Но ни одна из них не будет создавать таблицы только в существующей базе данных, а вместо этого удалит базу данных полностью и создаст ее с нуля, включая все таблицы.

Что ты можешь сделать:

  • Удалите базу данных вручную (например, в SSMS), затем EF создаст новую, включая таблицы
  • Или используйте инициализатор DropCreateDatabaseAlways один раз, чтобы EF создала базу данных, включая таблицы, а затем снова удалила инициализатор
  • Или если вы не можете удалить базу данных по любой причине, напишите SQL-код в методе Seed который добавляет таблицы в базу данных (неправильно, благодаря комментарию Марка Стаффорда)
  • Или используйте Code-First Migrations (EF> = 4.3), чтобы добавить новые таблицы в существующую базу данных, когда вы добавили новые сущности.

@ Ответ Slauma является правильным: таблицы создаются при инициализации. Вероятно, проще всего просто удалить базу данных и позволить EF создать ее (если вы оставите строку подключения как есть, она создаст базу данных под названием LibraryReservationSystem на локальном компьютере; возможно, вам нужно указать явное имя хоста, если вы собираетесь использовать строка соединения в config в этой точке).

Вам нужно что-то вроде:

 public class NerdDinnersInitializer : DropCreateDatabaseIfModelChanges { } 

И вам также потребуется установить инициализатор в свой метод Main:

 Database.SetInitializer(new NerdDinnersInitializer()); 

Слово для мудрых: НИКОГДА не развертывайте приложение с инициализатором, как указано выше. Вы можете увидеть это сообщение в блоге о том, как управлять инициализаторами через файл конфигурации, чтобы получить более подробную информацию о том, как управлять этим в производственных приложениях.

Я просто столкнулся с одной и той же проблемой – я уже создал свою базу данных в SQL-окне разработки внутри нашей сети, для которой требуется проверка подлинности SQL.

Когда я запускал приложение, таблицы не создавались. Я нашел эту удивительную, но простую статью о создании страtagsи инициализации базы данных Code First, которая сначала проверяет, существует ли firebase database, а затем запускает скрипт с базой данных для создания таблиц.

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

Но ты это уже знал.

Как показывает ошибка, у вас нет таблицы под названием Dinners в вашей базе данных.

Используете ли вы одиночные или множественные имена таблиц? т.е. ужин или ужин?

Как я понял, вы ожидаете, что код будет создавать БД автоматически на основе описания ваших сущностей. Но этого не произойдет, если вы явно создадите БД. Пожалуйста, ознакомьтесь со следующей ссылкой: http://www.simple-talk.com/dotnet/.net-framework/entity-framework-4460—learn-to-create-databases-from-the-model/ и этот учебник по EF codefirst: http://codefirst.codeplex.com/

После создания ваших объектов вы можете щелкнуть правой кнопкой мыши рабочее пространство файла EDMX и выбрать «Создать базу данных из модели …». Нажмите до тех пор, пока в вашем окне не будет скрипта. Для этого скрипта вам нужно будет удалить шаг создания базы данных (если он есть) и перейти прямо к CREATE TABLE …

Копировать-Вставить и выполнить в любой БД, которую у вас есть. Возможно, вам придется настроить сценарий для конкретной РСУБД.