14

例外が発生した時点で「EntityFrameworkDbContext」を使用していますが、towars.dboが見つかりませんでした。私のウェブサイトではいつもtowar.dboについて質問していますが、towars.dboについては質問していないので、これは非常に奇妙です。どこに問題があるか知っていますか?

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

Towarに関する私のすべてのこと(もちろん私のプログラムの別の場所):

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; }
    }
4

4 に答える 4

14

次の行をコンテキストに追加します。

modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
于 2012-08-03T16:07:02.990 に答える
8

次のように流暢なAPIを使用してクラスのメソッドをTowarオーバーライドすることにより、EFにテーブルにマップするように指示できます。OnModelCreatingDBContext

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

これで、EFはのTowar代わりにテーブルを検索しますTowars。これらのテーブルを作成していない場合は、他にも問題があります。

于 2012-08-03T16:02:47.827 に答える
5

EFコードは最初にテーブル名を自動的に複数形にします。属性を使用して[Table]、エンティティをテーブル名に明示的にマップします。

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

複数形をゴバリーに無効にする方法もあるようです。エンティティフレームワークコードの最初の命名規則を参照してください-複数のテーブル名に戻りますか?

于 2012-08-03T15:59:45.403 に答える
3
using System.Data.Entity.ModelConfiguration.Conventions;

namespace MVCDemo.Models

     {
         public class EmployeeContext : DbContext

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

完全を期すために@42

于 2017-05-12T05:21:41.847 に答える