2012-08-03 12 views
8

Używam "Entity Framework DbContext" w momencie, gdy mam wyjątek towars.dbo nie został znaleziony. Jest to bardzo dziwne, ponieważ na mojej stronie internetowej cały czas pytam o towar. Ale nie ma Towars.dbo Czy wiesz, gdzie jest problem?Entity Framework dodał s do mojego .dbo

- InnerException {"Invalid object name 'dbo.Towars'."} System.Exception {System.Data.SqlClient.SqlException} 

My wszystko o towar (oczywiście inne miejsce w moim programie):

public class ProductController : Controller 
{ 
    // 
    // GET: /Product/ 
     public ITowarRepository repository; 

     public ProductController(ITowarRepository productRepository) 
     { 
     repository = productRepository; 
     } 

     public ViewResult List() 
     { 
      return View(repository.Towar); 
     } 

} 


public interface ITowarRepository 
    { 
     IQueryable<Towar> Towar { get; } 
    } 

public DbSet<Towar> Towar { get; set; } 

public class EFTowarRepository : ITowarRepository 
    { 
     public EFDbContext context = new EFDbContext(); 
     public IQueryable<Towar> Towar 
     { 
      get { return context.Towar; } 
     } 
    } 
public class Towar 
    { 
     [Key] 
     public int Id_tow { get; set; } 
     public string Nazwa { get; set; } 
     public string Opis { get; set; } 
     public decimal Cena { get; set; } 
     public int Id_kat { get; set; } 
    } 
+0

jaka jest twoja nazwa tabeli w db? ARe jesteś podłączony do właściwego db? – Shyju

+0

połączenie zrobić bazy danych jest poprawna RPD

Odpowiedz

2

Można powiedzieć EF mapować do stołu Towar poprzez nadpisanie metody OnModelCreating w swojej klasie DBContext z płynną API tak:

public class EFDbContext : DbContext 
{ 
    protected override void OnModelCreating(DbModelBuilder modelBuilder) 
    { 
     modelBuilder.Entity<Towar>().ToTable("Towar"); 
    } 
} 

Teraz EF będzie szukać Towar stole zamiast Towars. Jeśli nie masz utworzonych tabel, istnieje inny problem.

+0

Dzięki za pomoc :) Nie rozumiem, dlaczego tworzą tę głupią rzecz w Visual Studio, ale jestem bardzo zadowolony z twojej pomocy. – RPD

+0

@RPD: Nie ma za co. cieszę się, że mogłem pomóc – Shyju

+0

Potrzebujesz połączenia z bazą ??? 'base.OnModelCreating (modelBuilder);' –

4

EF Code First automatycznie pluralizes nazwy tabeli. Użyj atrybutu [Table] jawnie mapować podmiot do nazwy tabeli:

[Table("Towary")] 
public class Towary 
{ 
    // Whatever properties 
} 

Wygląda na to, istnieje sposób, aby wyłączyć pluralization gobally też zobaczyć Entity Framework Code First naming conventions - back to plural table names?.

+0

Błąd "Nazwa" nie jest poprawnym nazwanym argumentem atrybutu. Nazwane argumenty atrybutów muszą być polami, które nie są tylko do odczytu, statyczne lub const, lub właściwościami do odczytu i zapisu, które są publiczne, a nie statyczne. \t C: \ Users \ Rafael \ Desktop \ MVC ksiązka \ moj projekt \ sklep \ SportsStore \ Entities \ Product.cs SportsStore.Domain – RPD

+0

Przepraszam, przeczytałem złe dokumenty. Powinno to być po prostu '[Table (" Towary ")]'. –

+0

dziękuję za poświęcony czas i pomoc – RPD

10

Dodaj następujący wiersz do kontekstu:

modelBuilder.Conventions.Remove<PluralizingTableNameConvention>(); 
+0

dziękuje, ale teraz działa poprawnie – RPD

+3

Jest to najlepszy sposób, ponieważ inne rozwiązania są tylko raz naprawić. –

2
using System.Data.Entity.ModelConfiguration.Conventions; 

namespace MVCDemo.Models 

    { 
     public class EmployeeContext : DbContext 

     protected override void OnModelCreating(DbModelBuilder modelBuilder) 
     { 
      modelBuilder.Conventions.Remove<PluralizingTableNameConvention>(); 
     } 
} 

Dla kompletności @ czterdzieści dwa

+0

Dzięki Twojej odpowiedzi @ Crismogram, jestem w stanie połączyć się ze zdalną bazą danych bez żadnych problemów .... Świetne podejście ... –