C# 实体框架在运行时查询中向表名添加了额外的's',如果添加'PluralizingTableNameConvention',可以避免额外的's'引发错误
我有3个表的简单上下文 数据库表已经存在,但使用代码优先的方法 模型Device.cs是-C# 实体框架在运行时查询中向表名添加了额外的's',如果添加'PluralizingTableNameConvention',可以避免额外的's'引发错误,c#,entity-framework,entity-framework-6,C#,Entity Framework,Entity Framework 6,我有3个表的简单上下文 数据库表已经存在,但使用代码优先的方法 模型Device.cs是- public class Device { public System.Guid Id { get; set; } public string Name{ get; set; } } public class sampledbContext : DbContext { public sampledbContext ()
public class Device
{
public System.Guid Id { get; set; }
public string Name{ get; set; }
}
public class sampledbContext : DbContext
{
public sampledbContext ()
: base("name=sampledbContext ")
{
}
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
}
public virtual DbSet<Device> Devices { get; set; }
}
数据库已经创建,我尝试在这里使用代码优先的方法。
我还没有更新数据库
我尝试了
启用迁移
和更新数据库
它创建了名为s
的表,比如设备
为什么<是否添加了代码>s?您已在以下行中关闭自动迁移:
Database.SetInitializer<IoTSimulatordbContext>(null);
Database.SetInitializer(null);
因此,您需要手动运行updatedatabase来更新模型(您可以通过packagemanager控制台运行)。如果表中有任何数据,则迁移可能会失败,因为可能会丢失数据。在这种情况下,您需要先删除表中的所有数据,或者先创建自定义迁移脚本来处理数据复制。由于这似乎是一个测试,因此最好从一开始就关闭多元化,重新启动迁移项目。您已经关闭了行中的自动迁移:
Database.SetInitializer<IoTSimulatordbContext>(null);
Database.SetInitializer(null);
因此,您需要手动运行updatedatabase来更新模型(您可以通过packagemanager控制台运行)。如果表中有任何数据,则迁移可能会失败,因为可能会丢失数据。在这种情况下,您需要先删除表中的所有数据,或者先创建自定义迁移脚本来处理数据复制。由于这似乎是一个测试,因此最好从一开始就关闭多元化,重新启动迁移项目。您可以添加一个DataAnnotation来描述表类中的模式和表名,如下所示: [表(“设备”,Schema=“MySchema”)]
这将为您提供对命名的更多控制。您可以添加一个DataAnnotation来描述表类中的模式和表名,如下所示: [表(“设备”,Schema=“MySchema”)]
这将为您提供对命名的更多控制。错误是什么?支持“sample dbContext”上下文的模型在创建数据库后已更改错误是什么?支持“sample dbContext”上下文的模型在创建数据库后已更改