2012-08-03 13 views
8

Io uso "Entity Framework DbContext" nel momento in cui ho avuto l'eccezione towars.dbo non è stato trovato. Questo è molto strano perché nel mio sito web mi chiedo sempre di towar.dbo ma non di rimorchiatori.dbo Sai dove si trova un problema?Entity Framework aggiunto s al mio .dbo

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

mie tutte le cose su Towar (ovviamente posto diverso nel mio programma):

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

qual è il tuo nome della tabella nel db? Sei collegato al db corretto? – Shyju

+0

connessione di fare database è corretto RPD

risposta

2

Si può dire EF per mappare al tavolo Towar sovrascrivendo il metodo OnModelCreating nella classe DBContext con API fluente in questo modo:

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

Ora EF cercherà Towar tabella anziché Towars. Se non hai creato queste tabelle, c'è qualche altro problema che stai avendo.

+0

Grazie per l'aiuto :) Non capisco perché creano questa stupida cosa in Visual Studio ma sono molto contento del tuo aiuto. – RPD

+0

@RPD: prego. felice di poter aiutare – Shyju

+0

Hai bisogno di chiamare la base ??? 'base.OnModelCreating (modelBuilder);' –

4

EF Codice primo pluralizes automaticamente i nomi delle tabelle. Utilizzare un attributo [Table] per mappare in modo esplicito l'entità a un nome di tabella:

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

Sembra che ci sia un modo per disattivare pluralizzazione gobally troppo, vedi Entity Framework Code First naming conventions - back to plural table names?.

+0

Errore 'Nome' non è un argomento attributo con nome valido. Gli argomenti attribuiti denominati devono essere campi che non sono proprietà readonly, statiche o const, o read-write che sono pubbliche e non statiche. \t C: \ Users \ Rafal \ Desktop \ MVC książka \ moj Projekt \ sklep \ SportsStore \ Enti \ Product.cs SportsStore.Domain – RPD

+0

Siamo spiacenti, ho letto la documentazione sbagliate. Dovrebbe essere solo '[Tabella (" Towary ")]'. –

+0

grazie per il tuo tempo e aiuto – RPD

10

Aggiungere la seguente riga al vostro contesto:

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

grazie, ma ora funziona correttamente – RPD

+3

Questo è il modo migliore perché le altre soluzioni sono solo una soluzione temporanea. –

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

namespace MVCDemo.Models 

    { 
     public class EmployeeContext : DbContext 

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

Per ragioni di completezza @ quarantadue

+0

Con la tua risposta @Crismogram, sono in grado di connettermi a un database remoto senza problemi .... Grande approccio ... –