我在EF中有一些模型和表格,你可以在这里看到其中一个:
现在,当我想从模型生成数据库时,它会在生成的sql中添加's'到表的名称:
CREATE TABLE [dbo].[Options] (
[Id] int IDENTITY(1,1) NOT NULL,
[Name] nvarchar(50) NOT NULL,
[Price] int NOT NULL
);
我也禁用了多个名字,但没有改变:
这会导致部署Web应用程序时出错。我怎样才能防止多元化?
答案 0 :(得分:4)
只需覆盖OnModelCreating方法并删除“PluralizingTableNameConvention”约定。所以你告诉实体框架不要复数表名,只需添加
更新了
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
}
它将删除默认情况下附加到所有模型构建器
的Pluralising约定您还需要添加命名空间
System.Data.Entity.ModelConfiguration.Conventions;
希望它会有所帮助
答案 1 :(得分:1)
在创建EDMX文件
时,应取消选中复数形式答案 2 :(得分:0)
似乎只能使用Code First停用复数功能。 这就是为什么以下代码不起作用的原因:
modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
试试这个,也许幸运的是:
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<Option>().ToTable("Option")
}
如果您需要知道正在使用的实体框架版本,有几种方法:
答案 3 :(得分:-3)
原因是:
您在数据库中创建的任何表,实体框架将其转换为类,以便您可以轻松地创建对象。
只需将后面代码中的表格验证为单数(就像EF定义的那样)。
小心! (不要在你的应用程序中使用与任何表中相同的名称命名任何页面,因为它们都被转换为类,当你打电话给表时,它会在表和页面之间丢失)。 / p>