EF CTP5 ошибка: неверное имя объекта - PullRequest
4 голосов
/ 18 января 2011

Я следовал примеру в блоге Скотту о первом коде EF CTP5, но я получаю сообщение об ошибке

System.Data.SqlClient.SqlException: недопустимое имя объекта 'dbo.Products'.

это код, который я получил.

<add name="CTP5Context"
     connectionString="data source=.\SQLEXPRESS;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|EFCTP5.mdf;User Instance=true"
     providerName="System.Data.SqlClient" />


public class CTP5Context : DbContext 
{
    public DbSet<Product> Products { get; set; }
}

public class Product
{
    public int Id { get; set; }
    public string ProductName { get; set; }
    public int Amount { get; set; }
}



var context = new CTP5Context();
        var products = context.Products;            

        return View(products);

я вроде ничего не понимаю, здесь я сделал то же самое, что и блог, это не мой первый раз с EF (но CTP5 tho), я что-то пропускаю?

Ответы [ 5 ]

7 голосов
/ 29 января 2011

Если ваша таблица называется Product в базе данных, попробуйте это:

[Table("Product", SchemaName = "dbo")]
public class Product
{
    public int Id { get; set; }
    public string ProductName { get; set; }
    public int Amount { get; set; }
}

Чтобы использовать атрибут Table Вам необходимо добавить следующее выражение using:

using System.ComponentModel.DataAnnotations;

Надеюсь, это поможет! У меня это сработало.

5 голосов
/ 09 мая 2011

У меня была такая же проблема, но я сделал 2 изменения, и это работает для меня. Я изменил строку подключения (Добавлен начальный каталог)

<add name="CTP5Context"
     connectionString="data source=.\SQLEXPRESS;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|\northwind.mdf;User Instance=true;initial catalog=Northwind"
     providerName="System.Data.SqlClient" />

и в Global.asax я добавил следующую строку в Application_Start ()

Database.SetInitializer<Northwind>(new System.Data.Entity.DropCreateDatabaseAlways<Northwind>());
3 голосов
/ 25 августа 2011

Кажется, что EF Code First работает по-разному, в зависимости от типа базы данных, к которой вы подключаетесь.Если вы работаете с SQLCE, который ScottGu использует для демонстрации кода EF First, тогда все таблицы будут созданы с именами, которые не являются множественными.Однако если вы используете SQL Server 2008 (это то, что я тестировал), он ожидал, что имена таблиц будут множественными.Есть несколько способов обойти это, вы можете добавить атрибут имени таблицы, как показывает Омар, или вы можете переопределить событие OnModelCreating для контекста.

 protected override void OnModelCreating(DbModelBuilder modelBuilder) {
        modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
        base.OnModelCreating(modelBuilder);
 }
3 голосов
/ 18 января 2011

Исключение выглядит так, как будто оно исходит из базы данных.Вы уверены, что ваше имя таблицы «Продукты» или «Продукт» (единственное, а не множественное?)

1 голос
/ 23 января 2011

Убедитесь, что ваша таблица Products создана со схемой dbo , часто схема будет отличаться от dbo , например, можетбыть вашим именем пользователя или именем сервера (если учетная запись, с которой вы работаете, отсутствует в схеме db_owner ).Откройте БД (поскольку это SQLExpress) с помощью обозревателя серверов в Visual Studio)

. Для этого щелкните правой кнопкой мыши имя таблицы и выберите Открыть определение таблицы , затем в определении таблицы щелкните правой кнопкой мыши ивыберите Свойства и в окне свойств проверьте, что указано в значении схема .Если это не DBO, вы можете изменить его на dbo и сохранить.

...