背景:
通过EF,操作现有数据库的数据
但是已有的数据库的表名命名,貌似与EF默认规则不太一样
例子:
public class EFDbContext:DbContext
{
public EFDbContext() : base("name=EFContext") { }
static EFDbContext() {
//EF不修改数据库
Database.SetInitializer<EFDbContext>(null);
}
public DbSet<Employee> Emplo_info { get; set; }
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
//取消负数表名惯例
modelBuilder.Conventions.Remove<System.Data.Entity.ModelConfiguration.Conventions.PluralizingTableNameConvention>();
}
}
~~~~~~~~~~~~~~
可以看到
public DbSet<Employee> Emplo_info { get; set; }
属性名设置的是Emplo_info,这是与数据库表名一致的
但是在运行时,这样的错误
:System.Data.SqlClient.SqlException: 对象名 'dbo.Employee' 无效。
所以我怀疑 EF是否还有一些其他的惯例来管理 表名 与 属性名 之间映射的,改怎么去除
我的目的就是:在不修改现有数据库的前提下,使用EF能有效操作。改怎么办???
Code First
~~~~~~~~~~~~~~
我已经找到答案了
在entity定义的类型上加上 注解
[Table("Emplo_info")]
就可以了。不过还是十分感谢 各位的关注
我想问下对应CodeFirst的另一个名词好象叫DatabaseFirst吧。不知道中文怎么理解。
EF有三种方式 code first , model first , db first 。
db first 是使用现有数据库 生成模型的
model first 是用设置 生成数据库的
code first 可以生成数据库,也可以使用现有数据库
EF我刚学习了几天,主要关注code first 其他两种我也就只知道上面的内容了。