实体框架将s添加到我的.dbo中

RPD*_*RPD 9 asp.net-mvc visual-studio-2010

我使用"实体框架DbContext",此刻我有异常towars.dbo未找到.这很奇怪,因为在我的网站上我总是询问towar.dbo但没有towars.dbo你知道哪里有问题吗?

- InnerException    {"Invalid object name 'dbo.Towars'."}   System.Exception {System.Data.SqlClient.SqlException}
Run Code Online (Sandbox Code Playgroud)

关于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; }
    }
Run Code Online (Sandbox Code Playgroud)

For*_*Two 11

将以下行添加到您的上下文中:

modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
Run Code Online (Sandbox Code Playgroud)

  • 这是最好的方法,因为其他解决方案只是一次性修复. (4认同)

And*_*bel 5

EF Code First 自动将表名复数化。使用[Table]属性将实体显式映射到表名:

[Table("Towary")]
public class Towary
{
   // Whatever properties
}
Run Code Online (Sandbox Code Playgroud)

看起来也有一种方法可以全局禁用复数,请参阅实体框架代码优先命名约定 - 回到复数表名?.


Shy*_*yju 5

您可以使用流利的API Towar覆盖类中的OnModelCreating方法,以使EF映射到表,DBContext如下所示:

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

现在,EF将寻找Towartable而不是Towars。如果您没有创建这些表,那么您还有其他问题。