fca*_*era 6 oracle odp.net ef-code-first asp.net-mvc-3 dbcontext
我正在尝试使用ODP.net在Oracle下使用EF CodeFirst.这是我的DbContext类:
public class MyCEContext : DbContext {
public DbSet<Person> Persons { get; set; }
protected override void OnModelCreating(DbModelBuilder modelBuilder) {
modelBuilder.Entity<Person>().ToTable("PERSONS","myce");
}
public MyCEContext() :
base(new OracleConnection(
"Data Source=cebd; User ID=myce; Password=****;"), true) {}
}
Run Code Online (Sandbox Code Playgroud)
问题是,当我尝试做这样的事情时:
MyCEContext context = new MyCEContext();
Person p = context.Persons.Find(1);
Run Code Online (Sandbox Code Playgroud)
我得到了这个内心错误:
{"ORA-00942: table or view does not exist"}
Run Code Online (Sandbox Code Playgroud)
表格存在.
我究竟做错了什么?
正如尼克在他的回答中写道,问题与生成的查询的引用和大小写有关,但与表的名称有关,但与模式的名称有关:
SELECT *
FROM "myce"."PERSONS" "Extent1"
Run Code Online (Sandbox Code Playgroud)
所以解决方案非常简单,只是大写用户ID和模式名称:
modelBuilder.Entity<Person>().ToTable("PERSONS","MYCE");
Run Code Online (Sandbox Code Playgroud)
通常,所有都必须是大写的:表,模式和字段的名称.但最好使用Column属性注释每个映射属性,而不是使用大写属性名称:
[Column("FIRST_NAME")]
public string FirstName { get; set; }
Run Code Online (Sandbox Code Playgroud)
因此,名称将更容易在数据库和类中读取.
归档时间: |
|
查看次数: |
12136 次 |
最近记录: |