我正在使用" Entity Framework DbContext"目前我有异常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; }
}
答案 0 :(得分:11)
将以下行添加到您的上下文中:
modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
答案 1 :(得分:4)
EF Code First会自动复数表名。使用[Table]
属性将实体显式映射到表名:
[Table("Towary")]
public class Towary
{
// Whatever properties
}
看起来有一种方法可以禁用多元化,请参阅Entity Framework Code First naming conventions - back to plural table names?。
答案 2 :(得分:4)
您可以通过使用流畅的API覆盖Towar
类中的OnModelCreating
方法,告诉EF映射到表DBContext
,如下所示:
public class EFDbContext : DbContext
{
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<Towar>().ToTable("Towar");
}
}
现在EF会查找Towar
表而不是Towars
。如果您没有创建这些表,那么您还有其他一些问题。
答案 3 :(得分:2)
using System.Data.Entity.ModelConfiguration.Conventions;
namespace MVCDemo.Models
{
public class EmployeeContext : DbContext
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
}
}
为了完整性@ forty-two