加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net-mvc-3 – 如何配置DbContext以使用Oracle ODP.Net和EF C

发布时间:2020-12-16 00:05:10 所属栏目:asp.Net 来源:网络整理
导读:我正在尝试使用ODP.net在Oracle下使用EF CodeFirst.这是我的DbContext类: public class MyCEContext : DbContext { public DbSetPerson Persons { get; set; } protected override void OnModelCreating(DbModelBuilder modelBuilder) { modelBuilder.Entit
我正在尝试使用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) {}

}

问题是,当我尝试做这样的事情时:

MyCEContext context = new MyCEContext();
Person p = context.Persons.Find(1);

我得到这个内心的错误:

{"ORA-00942: table or view does not exist"}

表格存在.

我究竟做错了什么?

解决方法

正如Nick在他的回答中所写的那样,问题与生成的查询的引用和大小写有关,但与表的名称有关,但与模式的名称有关:
SELECT * 
FROM "myce"."PERSONS" "Extent1"

所以解决方案非常简单,只是大写用户ID和模式名称:

modelBuilder.Entity<Person>().ToTable("PERSONS","MYCE");

通常,所有都必须是大写的:表,模式和字段的名称.但最好使用Column属性注释每个映射属性,而不是使用大写属性名称:

[Column("FIRST_NAME")]
    public string FirstName { get; set; }

因此,名称将更容易在数据库和类中读取.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读