2013-02-26 1 views
0

Я действительно новичок в MVC. Я сделал вид, что просто извлекает данные из таблицы с именем Info, используя этот кодНедопустимое имя объекта 'dbo.Infoes' при извлечении данных из БД с использованием EF

Контроллер:

namespace FP.WebUI.Controllers 
{ 
    public class HomeController : Controller 
    { 
     private IRetrieveData repo; 
     public HomeController(IRetrieveData repoParam) 
     { 
      repo = repoParam; 
     } 
     public ViewResult Index() 
     { 
      Info model = repo.Info.ToList().FirstOrDefault(); 
      return View(model); 
     } 

    } 
} 

И вид:

<div id="follow"> 
    <a href="http://@Model.Facebook.Substring(Model.Facebook.IndexOf("http://")+1,Model.Facebook.Length)"><img src="img/temp.png" alt="facebook"/></a> 
    <a href="http://@Model.Twitter.Substring(Model.Twitter.IndexOf("http://")+1,Model.Twitter.Length)"><img src="img/temp.png" alt="twitter"/></a> 
    <a href="mailto://@Model.Email"><img src="img/temp.png" alt="email"/></a> 
</div> 

Но я всегда получаю это исключение прямо в строки:

Info model = repo.Info.ToList().FirstOrDefault(); 

Исключение составляет:

Ошибка сервера в приложении «/».

Неверное имя объекта 'dbo.Infoes'.

Описание: Необработанное исключение произошло во время выполнения текущего веб-запроса. Просмотрите трассировку стека для получения более информации об ошибке и ее месте в коде.

Сведения об исключении: System.Data.SqlClient.SqlException: Неверный объект имя 'dbo.Infoes'.

Я понятия не имею, где проблема, поэтому я поставлю связанные части проекта.


Строка подключения внутри корня Web.config:

<connectionStrings>  
    <add name="EFDbContext" providerName="system.data.sqlclient" connectionString="Data Source=.;Initial Catalog=photography;Integrated Security=True"/> 
    </connectionStrings> 

EFDbContext класса:

namespace FP.Domain.Concrete 
{ 
    public class EFDbContext : DbContext 
    { 
     public DbSet<Gallery> Gallery { get; set; } 
     public DbSet<SessionImages> SessionImages { get; set; } 
     public DbSet<Sessions> Sessions { get; set; } 
     public DbSet<Admins> Admins { get; set; } 
     public DbSet<Info> Info { get; set; } 
     public DbSet<Offers> Offers { get; set; } 
    } 
} 

EFDbRetrieve класс:

namespace FP.Domain.Concrete 
{ 
    public class EFDbRetrieve : IRetrieveData 
    { 
     private EFDbContext context = new EFDbContext(); 

     public IQueryable<Admins> Admins 
     { 
      get { return context.Admins; } 
     } 

     public IQueryable<Gallery> Gallery 
     { 
      get { return context.Gallery; } 
     } 

     public IQueryable<SessionImages> SessionImages 
     { 
      get { return context.SessionImages; } 
     } 

     public IQueryable<Sessions> Sessions 
     { 
      get { return context.Sessions; } 
     } 

     public IQueryable<Offers> Offers 
     { 
      get { return context.Offers; } 
     } 

     public IQueryable<Info> Info 
     { 
      get { return context.Info; } 
     } 
    } 
} 

IRetrieveData я nterface:

namespace FP.Domain.Abstract 
{ 
    public interface IRetrieveData : IAdmins, IGallery, ISessionImages, ISessions, IOffers, IInfo 
    { 
    } 
} 

, который наследует от интерфейса IInfo:

namespace FP.Domain.Abstract 
{ 
    public interface IInfo 
    { 
     IQueryable<Info> Info { get; } 
    } 
} 

Я был бы очень признателен, если кто-то помог мне в этом, я получаю разочарование.

+4

Это ошибка отображения (вероятно, из-за плюрализацию имен таблиц, созданных из классов сущностей), но вы не включили в свои таблицах отображения :) –

+0

@ Trustme-I'maDoctor мог бы вы предоставить мне с учебником или видео, которое объясняет, что отображение вещь? Большое спасибо –

+0

[Вот учебник с видео] (http://msdn.microsoft.com/en-us/data/jj200620), включенные отображения. Если вы хотите авто-карту, используйте решение из ответа. –

ответ

4

Как они предположили, проблема в том, что имена таблиц становятся плюрализованы (Info сопоставляется с таблицей, называемой Info). Вы можете проверить имена таблиц в SQL. Чтобы отключить это, добавьте:

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

класс EFDbContext.

Надеется, что это помогает