0

私は本当にMVCの初心者です。Infoこのコードを使用して名前が付けられたテーブルからデータを取得するだけのビューを作成しました

コントローラー:

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'。

説明:現在のWebリクエストの実行中に未処理の例外が発生しました。エラーとエラーがコードのどこで発生したかについての詳細は、スタックトレースを確認してください。

例外の詳細: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インターフェース:

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

1 に答える 1

4

彼らが示唆したように、問題はテーブル名が複数形になっていることです(InfoはInfoesと呼ばれるテーブルにマップされます)。SQLでテーブル名を確認できます。これを無効にするには、次を追加します。

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

EFDbContextクラスに。

お役に立てれば

于 2013-02-26T13:43:55.627 に答える